From 6e37044e3080d89896be29d32db94b52282d319b Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 15 Nov 2025 00:15:52 +0300 Subject: [PATCH 01/18] Features: 1) Initialize `supervisor` package with basic metadata and structure; Fixes: none; Extra: None; new package added. --- supervisor/package.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 supervisor/package.json diff --git a/supervisor/package.json b/supervisor/package.json new file mode 100644 index 00000000..7ec53ad4 --- /dev/null +++ b/supervisor/package.json @@ -0,0 +1,11 @@ +{ + "name": "supervisor", + "version": "1.0.0", + "description": "Supervisor is a custom dashboard application for eVibes", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "WISELESS team", + "license": "../LICENSE" +} From fb84f1f89be6e8724b1d70f6ef920cad8ebcf080 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 15 Nov 2025 00:21:30 +0300 Subject: [PATCH 02/18] Features: 1) Add Dockerfile for supervisor service; 2) Update docker-compose.yml to include supervisor service; Fixes: 1) No fixes applied; Extra: 1) Supervisor service configured with environment variables and custom start script; 2) Uses multi-stage build for optimized runtime; 3) Sets up non-root user for security; 4) Exposes port 7777; 5) Depends on app service; 6) Uses default logging config. --- Dockerfiles/supervisor.Dockerfile | 38 +++++++++++++++++++++++++++++++ docker-compose.yml | 15 ++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 Dockerfiles/supervisor.Dockerfile diff --git a/Dockerfiles/supervisor.Dockerfile b/Dockerfiles/supervisor.Dockerfile new file mode 100644 index 00000000..f6835cc5 --- /dev/null +++ b/Dockerfiles/supervisor.Dockerfile @@ -0,0 +1,38 @@ +# syntax=docker/dockerfile:1 +FROM node:22-bookworm-slim AS build +WORKDIR /app + +ARG EVIBES_BASE_DOMAIN +ARG EVIBES_PROJECT_NAME +ENV EVIBES_BASE_DOMAIN=$EVIBES_BASE_DOMAIN +ENV EVIBES_PROJECT_NAME=$EVIBES_PROJECT_NAME + +COPY ./supervisor/package.json ./supervisor/package-lock.json ./ +RUN npm ci --include=optional + +COPY ./supervisor ./ +RUN npm run build + +FROM node:22-bookworm-slim AS runtime +WORKDIR /app + +ENV HOST=0.0.0.0 +ENV PORT=7777 + +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl \ + && rm -rf /var/lib/apt/lists/* + +RUN addgroup --system --gid 1001 nodeapp \ + && adduser --system --uid 1001 --ingroup nodeapp --home /home/nodeapp nodeapp +USER nodeapp + +COPY --from=build /app/.output/ ./ + +RUN install -d -m 0755 -o nodeapp -g nodeapp /home/nodeapp \ + && printf '#!/bin/sh\nif [ \"$DEBUG\" = \"1\" ]; then export NODE_ENV=development; else export NODE_ENV=production; fi\nexec node /app/server/index.mjs\n' > /home/nodeapp/start.sh \ + && chown nodeapp:nodeapp /home/nodeapp/start.sh \ + && chmod +x /home/nodeapp/start.sh + +USER nodeapp +CMD ["sh", "/home/nodeapp/start.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index 4a0b5dc2..c31e7a9d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -217,6 +217,21 @@ services: - --web.config.file=/etc/prometheus/web.yml logging: *default-logging +# supervisor: +# container_name: supervisor +# build: +# context: . +# dockerfile: ./Dockerfiles/supervisor.Dockerfile +# restart: always +# env_file: +# - .env +# ports: +# - "7777:7777" +# depends_on: +# app: +# condition: service_started +# logging: *default-logging + volumes: postgres-data: From 43dc556063560dab106021142819e9f60a8bce70 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 15 Nov 2025 01:38:14 +0300 Subject: [PATCH 03/18] Features: 1) Migrate from Jazzmin to django-unfold for admin UI; Fixes: 1) Remove deprecated Jazzmin configuration and replace with unfold dependencies; 2) Update DRF API title to use new PROJECT_NAME; 3) Fix import order and remove unused imports in core/viewsets.py; Extra: 1) Add PROJECT_NAME to base settings; 2) Update INSTALLED_APPS to include unfold-related apps; 3) Clean up unused config references. --- docker-compose.yml | 15 ----- engine/core/admin.py | 4 +- engine/core/graphene/object_types.py | 7 +-- engine/core/tests/test_drf.py | 1 + engine/core/utils/emailing.py | 20 +++--- engine/core/utils/seo_builders.py | 2 +- engine/core/viewsets.py | 9 ++- engine/payments/utils/emailing.py | 7 ++- engine/vibes_auth/utils/emailing.py | 12 ++-- evibes/settings/__init__.py | 2 +- evibes/settings/base.py | 6 +- evibes/settings/constance.py | 20 +++--- evibes/settings/drf.py | 5 +- evibes/settings/jazzmin.py | 91 +++------------------------- evibes/settings/unfold.py | 28 +++++++++ pyproject.toml | 4 +- supervisor/package.json | 11 ---- uv.lock | 70 ++++++++++----------- 18 files changed, 122 insertions(+), 192 deletions(-) create mode 100644 evibes/settings/unfold.py delete mode 100644 supervisor/package.json diff --git a/docker-compose.yml b/docker-compose.yml index c31e7a9d..4a0b5dc2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -217,21 +217,6 @@ services: - --web.config.file=/etc/prometheus/web.yml logging: *default-logging -# supervisor: -# container_name: supervisor -# build: -# context: . -# dockerfile: ./Dockerfiles/supervisor.Dockerfile -# restart: always -# env_file: -# - .env -# ports: -# - "7777:7777" -# depends_on: -# app: -# condition: service_started -# logging: *default-logging - volumes: postgres-data: diff --git a/engine/core/admin.py b/engine/core/admin.py index b5a6b79d..900a7bb2 100644 --- a/engine/core/admin.py +++ b/engine/core/admin.py @@ -993,6 +993,6 @@ class ConstanceConfig: site.unregister([Config]) # noinspection PyTypeChecker site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore [list-item] -site.site_title = settings.CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] +site.site_title = settings.PROJECT_NAME site.site_header = "eVibes" -site.index_title = settings.CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] +site.index_title = settings.PROJECT_NAME diff --git a/engine/core/graphene/object_types.py b/engine/core/graphene/object_types.py index 9efe1081..aab912c2 100644 --- a/engine/core/graphene/object_types.py +++ b/engine/core/graphene/object_types.py @@ -2,7 +2,6 @@ import logging from contextlib import suppress from typing import Any -from constance import config from django.conf import settings from django.core.cache import cache from django.db.models import Max, Min, QuerySet @@ -139,7 +138,7 @@ class BrandType(DjangoObjectType): # type: ignore [misc] lang = graphene_current_lang() base = f"https://{settings.BASE_DOMAIN}" canonical = f"{base}/{lang}/brand/{self.slug}" - title = f"{self.name} | {config.PROJECT_NAME}" + title = f"{self.name} | {settings.PROJECT_NAME}" description = (self.description or "")[:180] logo_url = None @@ -265,7 +264,7 @@ class CategoryType(DjangoObjectType): # type: ignore [misc] lang = graphene_current_lang() base = f"https://{settings.BASE_DOMAIN}" canonical = f"{base}/{lang}/catalog/{self.slug}" - title = f"{self.name} | {config.PROJECT_NAME}" + title = f"{self.name} | {settings.PROJECT_NAME}" description = (self.description or "")[:180] og_image = graphene_abs(info.context, self.image.url) if getattr(self, "image", None) else "" @@ -537,7 +536,7 @@ class ProductType(DjangoObjectType): # type: ignore [misc] lang = graphene_current_lang() base = f"https://{settings.BASE_DOMAIN}" canonical = f"{base}/{lang}/product/{self.slug}" - title = f"{self.name} | {config.PROJECT_NAME}" + title = f"{self.name} | {settings.PROJECT_NAME}" description = (self.description or "")[:180] first_img = self.images.order_by("priority").first() diff --git a/engine/core/tests/test_drf.py b/engine/core/tests/test_drf.py index 3900c36a..bc2388cb 100644 --- a/engine/core/tests/test_drf.py +++ b/engine/core/tests/test_drf.py @@ -30,4 +30,5 @@ class DRFCoreViewsTests(TestCase): serializer.is_valid(raise_exception=True) return serializer.validated_data["access_token"] + # TODO: create tests for every possible HTTP method in core module with DRF stack diff --git a/engine/core/utils/emailing.py b/engine/core/utils/emailing.py index ae1f6eb5..9e28ad28 100644 --- a/engine/core/utils/emailing.py +++ b/engine/core/utils/emailing.py @@ -24,7 +24,7 @@ def contact_us_email(contact_info) -> tuple[bool, str]: ) email = EmailMessage( - _(f"{config.PROJECT_NAME} | contact us initiated"), + _(f"{settings.PROJECT_NAME} | contact us initiated"), render_to_string( "../templates/contact_us_email.html", { @@ -37,7 +37,7 @@ def contact_us_email(contact_info) -> tuple[bool, str]: }, ), to=[config.EMAIL_FROM], - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + from_email=f"{settings.PROJECT_NAME} <{config.EMAIL_FROM}>", connection=get_dynamic_email_connection(), ) email.content_subtype = "html" @@ -70,7 +70,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]: if not order.is_whole_digital: email = EmailMessage( - _(f"{config.PROJECT_NAME} | order confirmation"), + _(f"{settings.PROJECT_NAME} | order confirmation"), render_to_string( "digital_order_created_email.html" if order.is_whole_digital else "shipped_order_created_email.html", { @@ -81,7 +81,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]: }, ), to=[recipient], - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + from_email=f"{settings.PROJECT_NAME} <{config.EMAIL_FROM}>", connection=get_dynamic_email_connection(), ) email.content_subtype = "html" @@ -102,14 +102,14 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: activate(order.user.language) email = EmailMessage( - _(f"{config.PROJECT_NAME} | order delivered"), + _(f"{settings.PROJECT_NAME} | order delivered"), render_to_string( template_name="../templates/digital_order_delivered_email.html", context={ "order_uuid": order.human_readable_id, "user_first_name": "" or order.user.first_name, "order_products": ops, - "project_name": config.PROJECT_NAME, + "project_name": settings.PROJECT_NAME, "contact_email": config.EMAIL_FROM, "total_price": round(sum(0.0 or op.buy_price for op in ops), 2), # type: ignore [misc] "display_system_attributes": order.user.has_perm("core.view_order"), @@ -117,7 +117,7 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: }, ), to=[order.user.email], - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + from_email=f"{settings.PROJECT_NAME} <{config.EMAIL_FROM}>", connection=get_dynamic_email_connection(), ) email.content_subtype = "html" @@ -185,20 +185,20 @@ def send_promocode_created_email(promocode_pk: str) -> tuple[bool, str]: activate(promocode.user.language) email = EmailMessage( - _(f"{config.PROJECT_NAME} | promocode granted"), + _(f"{settings.PROJECT_NAME} | promocode granted"), render_to_string( template_name="../templates/promocode_granted_email.html", context={ "promocode": promocode, "user_first_name": "" or promocode.user.first_name, - "project_name": config.PROJECT_NAME, + "project_name": settings.PROJECT_NAME, "contact_email": config.EMAIL_FROM, "today": datetime.today(), "currency": settings.CURRENCY_CODE, }, ), to=[promocode.user.email], - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + from_email=f"{settings.PROJECT_NAME} <{config.EMAIL_FROM}>", connection=get_dynamic_email_connection(), ) email.content_subtype = "html" diff --git a/engine/core/utils/seo_builders.py b/engine/core/utils/seo_builders.py index 6567b54a..94a769b8 100644 --- a/engine/core/utils/seo_builders.py +++ b/engine/core/utils/seo_builders.py @@ -18,7 +18,7 @@ def website_schema(): return { "@context": "https://schema.org", "@type": "WebSite", - "name": config.PROJECT_NAME, + "name": settings.PROJECT_NAME, "url": f"https://{settings.BASE_DOMAIN}/", "potentialAction": { "@type": "SearchAction", diff --git a/engine/core/viewsets.py b/engine/core/viewsets.py index dea0b3b7..bce34d89 100644 --- a/engine/core/viewsets.py +++ b/engine/core/viewsets.py @@ -3,9 +3,8 @@ import uuid from typing import Type from uuid import UUID -from constance import config from django.conf import settings -from django.db.models import Prefetch, Q, OuterRef, Exists +from django.db.models import Exists, OuterRef, Prefetch, Q from django.http import Http404 from django.shortcuts import get_object_or_404 from django.utils.decorators import method_decorator @@ -270,7 +269,7 @@ class CategoryViewSet(EvibesViewSet): def seo_meta(self, request: Request, *args, **kwargs) -> Response: category = self.get_object() - title = f"{category.name} | {config.PROJECT_NAME}" + title = f"{category.name} | {settings.PROJECT_NAME}" description = (category.description or "")[:180] canonical = f"https://{settings.BASE_DOMAIN}/{settings.LANGUAGE_CODE}/catalog/{category.slug}" og_image = request.build_absolute_uri(category.image.url) if getattr(category, "image", None) else "" @@ -387,7 +386,7 @@ class BrandViewSet(EvibesViewSet): def seo_meta(self, request: Request, *args, **kwargs) -> Response: brand = self.get_object() - title = f"{brand.name} | {config.PROJECT_NAME}" + title = f"{brand.name} | {settings.PROJECT_NAME}" description = (brand.description or "")[:180] canonical = f"https://{settings.BASE_DOMAIN}/{settings.LANGUAGE_CODE}/brand/{brand.slug}" @@ -529,7 +528,7 @@ class ProductViewSet(EvibesViewSet): p = self.get_object() images = list(p.images.all()[:6]) rating = {"value": p.rating, "count": p.feedbacks_count} - title = f"{p.name} | {config.PROJECT_NAME}" + title = f"{p.name} | {settings.PROJECT_NAME}" description = (p.description or "")[:180] canonical = f"https://{settings.BASE_DOMAIN}/{settings.LANGUAGE_CODE}/product/{p.slug}" og = { diff --git a/engine/payments/utils/emailing.py b/engine/payments/utils/emailing.py index 3e5af9d4..08e35089 100644 --- a/engine/payments/utils/emailing.py +++ b/engine/payments/utils/emailing.py @@ -2,6 +2,7 @@ from datetime import datetime from celery.app import shared_task from constance import config +from django.conf import settings from django.core.mail import EmailMessage from django.template.loader import render_to_string from django.utils.translation import activate @@ -24,20 +25,20 @@ def balance_deposit_email(transaction_pk: str) -> tuple[bool, str]: activate(transaction.balance.user.language) email = EmailMessage( - _(f"{config.PROJECT_NAME} | balance deposit"), + _(f"{settings.PROJECT_NAME} | balance deposit"), render_to_string( template_name="../templates/balance_deposit_email.html", context={ "amount": transaction.amount, "balance": transaction.balance.amount, "user_first_name": transaction.balance.user.first_name, - "project_name": config.PROJECT_NAME, + "project_name": settings.PROJECT_NAME, "contact_email": config.EMAIL_FROM, "today": datetime.today(), }, ), to=[transaction.balance.user.email], - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + from_email=f"{settings.PROJECT_NAME} <{config.EMAIL_FROM}>", connection=get_dynamic_email_connection(), ) email.content_subtype = "html" diff --git a/engine/vibes_auth/utils/emailing.py b/engine/vibes_auth/utils/emailing.py index 71bf33b8..ce8a9d1c 100644 --- a/engine/vibes_auth/utils/emailing.py +++ b/engine/vibes_auth/utils/emailing.py @@ -21,21 +21,21 @@ def send_verification_email_task(user_pk: str) -> tuple[bool, str]: activate(user.language) - email_subject = _(f"{config.PROJECT_NAME} | Activate Account") + email_subject = _(f"{settings.PROJECT_NAME} | Activate Account") email_body = render_to_string( "../templates/user_verification_email.html", { "user_first_name": user.first_name, "activation_link": f"https://{settings.STOREFRONT_DOMAIN}/{user.language}/activate-user?uid={urlsafe_base64_encode(force_bytes(user.uuid))}" f"&token={urlsafe_base64_encode(force_bytes(user.activation_token))}", - "project_name": config.PROJECT_NAME, + "project_name": settings.PROJECT_NAME, }, ) email = EmailMessage( subject=email_subject, body=email_body, - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + from_email=f"{settings.PROJECT_NAME} <{config.EMAIL_FROM}>", to=[user.email], connection=get_dynamic_email_connection(), ) @@ -60,7 +60,7 @@ def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]: activate(user.language) - email_subject = _(f"{config.PROJECT_NAME} | Reset Password") + email_subject = _(f"{settings.PROJECT_NAME} | Reset Password") email_body = render_to_string( "../templates/user_reset_password_email.html", { @@ -68,14 +68,14 @@ def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]: "reset_link": f"https://{settings.STOREFRONT_DOMAIN}/{user.language}/reset-password?uid=" f"{urlsafe_base64_encode(force_bytes(user.pk))}" f"&token={PasswordResetTokenGenerator().make_token(user)}", - "project_name": config.PROJECT_NAME, + "project_name": settings.PROJECT_NAME, }, ) email = EmailMessage( subject=email_subject, body=email_body, - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + from_email=f"{settings.PROJECT_NAME} <{config.EMAIL_FROM}>", to=[user.email], connection=get_dynamic_email_connection(), ) diff --git a/evibes/settings/__init__.py b/evibes/settings/__init__.py index 86adbb63..08a3c856 100644 --- a/evibes/settings/__init__.py +++ b/evibes/settings/__init__.py @@ -9,6 +9,6 @@ from .elasticsearch import * # noqa: F403 from .emailing import * # noqa: F403 from .extensions import * # noqa: F403 from .graphene import * # noqa: F403 -from .jazzmin import * # noqa: F403 +from .unfold import * # noqa: F403 from .logconfig import * # noqa: F403 from .summernote import * # noqa: F403 diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 76e6a0a2..aae74e7f 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -9,6 +9,8 @@ from django.core.exceptions import ImproperlyConfigured EVIBES_VERSION = "2025.4" RELEASE_DATE = datetime(2025, 11, 9) +PROJECT_NAME = getenv("EVIBES_PROJECT_NAME", "eVibes") + BASE_DIR: Path = Path(__file__).resolve().parent.parent.parent INITIALIZED: bool = (BASE_DIR / ".initialized").exists() @@ -103,7 +105,9 @@ SITE_ID: int = 1 INSTALLED_APPS: list[str] = [ "django_prometheus", "constance", - "jazzmin", + "unfold", + "unfold.contrib.filters", + "unfold.contrib.forms", "modeltranslation", "django.contrib.admin", "django.contrib.admindocs", diff --git a/evibes/settings/constance.py b/evibes/settings/constance.py index 5181f7ea..b511e3d7 100644 --- a/evibes/settings/constance.py +++ b/evibes/settings/constance.py @@ -1,8 +1,7 @@ from collections import OrderedDict from os import getenv -from django.utils.translation import gettext_lazy as _ -from django.utils.translation import gettext_noop +from django.utils.translation import gettext_noop as _ CONSTANCE_BACKEND = "constance.backends.database.DatabaseBackend" CONSTANCE_SUPERUSER_ONLY = False @@ -19,11 +18,11 @@ CONSTANCE_ADDITIONAL_FIELDS = { CONSTANCE_CONFIG = OrderedDict( [ - ### General Options ### - ("PROJECT_NAME", (getenv("EVIBES_PROJECT_NAME"), _("Name of the project"))), + ### Legal Options ### ("COMPANY_NAME", (getenv("COMPANY_NAME"), _("Name of the company"))), ("COMPANY_ADDRESS", (getenv("COMPANY_ADDRESS"), _("Address of the company"))), ("COMPANY_PHONE_NUMBER", (getenv("COMPANY_PHONE_NUMBER"), _("Phone number of the company"))), + ("TAX_RATE", (0, _("Tax rate in jurisdiction of your company. Leave 0 if you don't want to process taxes."))), ("EXCHANGE_RATE_API_KEY", (getenv("EXCHANGE_RATE_API_KEY", "example token"), _("Exchange rate API key"))), ### Email Options ### ("EMAIL_BACKEND", ("django.core.mail.backends.smtp.EmailBackend", _("!!!DO NOT CHANGE!!!"))), @@ -52,14 +51,14 @@ CONSTANCE_CONFIG = OrderedDict( CONSTANCE_CONFIG_FIELDSETS = OrderedDict( { - gettext_noop("General Options"): ( - "PROJECT_NAME", + _("Legal Options"): ( "COMPANY_NAME", "COMPANY_ADDRESS", "COMPANY_PHONE_NUMBER", + "TAX_RATE", "EXCHANGE_RATE_API_KEY", ), - gettext_noop("Email Options"): ( + _("Email Options"): ( "EMAIL_BACKEND", "EMAIL_HOST", "EMAIL_PORT", @@ -69,7 +68,7 @@ CONSTANCE_CONFIG_FIELDSETS = OrderedDict( "EMAIL_HOST_PASSWORD", "EMAIL_FROM", ), - gettext_noop("Features Options"): ( + _("Features Options"): ( "DAYS_TO_STORE_ANON_MSGS", "DAYS_TO_STORE_AUTH_MSGS", "DISABLED_COMMERCE", @@ -78,16 +77,15 @@ CONSTANCE_CONFIG_FIELDSETS = OrderedDict( "ABSTRACT_API_KEY", "HTTP_PROXY", ), - gettext_noop("SEO Options"): ( + _("SEO Options"): ( "ADVERTSIMENT", "ANALYTICS", ), - gettext_noop("Debugging Options"): ("SAVE_VENDORS_RESPONSES",), + _("Debugging Options"): ("SAVE_VENDORS_RESPONSES",), } ) EXPOSABLE_KEYS = [ - "PROJECT_NAME", "COMPANY_NAME", "COMPANY_ADDRESS", "COMPANY_PHONE_NUMBER", diff --git a/evibes/settings/drf.py b/evibes/settings/drf.py index 10710ce8..42a7f6c5 100644 --- a/evibes/settings/drf.py +++ b/evibes/settings/drf.py @@ -3,8 +3,7 @@ from os import getenv from django.utils.translation import gettext_lazy as _ -from evibes.settings.base import DEBUG, EVIBES_VERSION, SECRET_KEY, BASE_DOMAIN -from evibes.settings.constance import CONSTANCE_CONFIG +from evibes.settings.base import BASE_DOMAIN, DEBUG, EVIBES_VERSION, PROJECT_NAME, SECRET_KEY REST_FRAMEWORK: dict[str, str | int | list[str] | tuple[str, ...] | dict[str, bool]] = { "DEFAULT_PAGINATION_CLASS": "evibes.pagination.CustomPagination", @@ -99,7 +98,7 @@ Current API version: {EVIBES_VERSION} SPECTACULAR_SETTINGS = { "DEFAULT_GENERATOR_CLASS": "drf_spectacular_websocket.schemas.WsSchemaGenerator", - "TITLE": f"{CONSTANCE_CONFIG.get('PROJECT_NAME')[0]} API", # type: ignore [index] + "TITLE": f"{PROJECT_NAME} API", # type: ignore [index] "DESCRIPTION": SPECTACULAR_DESCRIPTION, "VERSION": EVIBES_VERSION, # noqa: F405 "TOS": "https://evibes.wiseless.xyz/terms-of-service", diff --git a/evibes/settings/jazzmin.py b/evibes/settings/jazzmin.py index 13adca84..44539e91 100644 --- a/evibes/settings/jazzmin.py +++ b/evibes/settings/jazzmin.py @@ -1,84 +1,11 @@ -from django.utils.translation import gettext_lazy as _ +""" +Deprecated: Jazzmin settings (removed in favor of django-unfold). -from evibes.settings.base import EVIBES_VERSION, STOREFRONT_DOMAIN -from evibes.settings.constance import CONSTANCE_CONFIG +This file is intentionally left as a stub to avoid accidental imports. +If imported, raise an explicit error guiding developers to Unfold. +""" -JAZZMIN_SETTINGS = { - "site_title": f"{CONSTANCE_CONFIG.get('PROJECT_NAME')[0]} Admin", # type: ignore [index] - "site_header": str(CONSTANCE_CONFIG.get("PROJECT_NAME")[0]), # type: ignore [index] - "site_brand": str(CONSTANCE_CONFIG.get("PROJECT_NAME")[0]), # type: ignore [index] - "site_logo": "logo.png", - "login_logo": "logo.png", - "login_logo_dark": "logo.png", - "site_logo_classes": "", - "site_icon": "favicon.ico", - "welcome_sign": _("Whoa! Only admins allowed here!"), - "copyright": f"eVibes {EVIBES_VERSION} by Wiseless", - "search_model": None, - "user_avatar": "avatar", - "topmenu_links": [ - { - "name": _("Home"), - "url": "admin:index", - "new_window": False, - }, - { - "name": _("Storefront"), - "url": f"https://{STOREFRONT_DOMAIN}", - "new_window": False, - }, - { - "name": "GraphQL Docs", - "url": "graphql-platform", - "new_window": False, - }, - { - "name": "Swagger", - "url": "swagger-ui-platform", - "new_window": False, - }, - { - "name": "Redoc", - "url": "redoc-ui-platform", - "new_window": False, - }, - { - "name": _("Taskboard"), - "url": "https://plane.wiseless.xyz/spaces/issues/dd33cb0ab9b04ef08a10f7eefae6d90c/?board=kanban", - "new_window": True, - }, - { - "name": "GitLab", - "url": "https://gitlab.com/wiseless/evibes", - "new_window": True, - }, - { - "name": _("Support"), - "url": "https://t.me/fureunoir", - "new_window": True, - }, - ], - "usermenu_links": [], - "show_sidebar": True, - "navigation_expanded": True, - "hide_apps": ["django_celery_results", ""], - "hide_models": [], - "order_with_respect_to": ["vibes_auth", "core", "payments", "blog"], - "icons": { - "vibes_auth": "fas fa-users-cog", - "vibes_auth.user": "fas fa-user", - "vibes_auth.Group": "fas fa-users", - }, - "default_icon_parents": "fas fa-chevron-circle-right", - "default_icon_children": "fas fa-circle", - "related_modal_active": False, - "use_google_fonts_cdn": True, - "show_ui_builder": True, - "changeform_format": "horizontal_tabs", - "language_chooser": True, -} - -JAZZMIN_UI_TWEAKS = { - "theme": "flatly", - "dark_mode_theme": "darkly", -} +raise ImportError( + "Jazzmin configuration has been removed. Use django-unfold instead. " + "See evibes/settings/unfold.py and INSTALLED_APPS in evibes/settings/base.py." +) diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py new file mode 100644 index 00000000..4fe4feaa --- /dev/null +++ b/evibes/settings/unfold.py @@ -0,0 +1,28 @@ +"""django-unfold configuration. + +This module defines branding for the Django admin using django-unfold. +It intentionally avoids database-backed configuration (e.g., Constance) +so that it is safe during initial migrations and in all environments. +""" + +from evibes.settings.base import PROJECT_NAME + +# See django-unfold documentation for all available options. +# Only minimal, production-safe branding is configured here. +UNFOLD = { + # Text shown in the browser title bar and in the admin header + "SITE_TITLE": f"{PROJECT_NAME} Admin", + "SITE_HEADER": PROJECT_NAME, + # Optional URL the header/brand links to (leave default admin index) + # "SITE_URL": "/admin/", + # Logos and favicon served via Django staticfiles + # Files are expected at: engine/core/static/logo.png, favicon.ico, favicon.png + # Refer to them by their static URL path (relative), no leading slash. + "SITE_LOGO": "logo.png", + # If you use a different logo for dark theme, set SITE_LOGO_DARK + # Otherwise Unfold will reuse SITE_LOGO + # "SITE_LOGO_DARK": "logo.png", + "SITE_ICON": "favicon.ico", + # Sidebar behavior, search etc. (keep defaults minimal) + # Unfold automatically respects user OS light/dark theme; no forcing here. +} diff --git a/pyproject.toml b/pyproject.toml index 10cf4a8c..9c213475 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,6 @@ dependencies = [ "django-extensions==4.1", "django-filter==25.2", "django-health-check==3.20.0", - "django-jazzmin==3.0.1", "django-json-widget==2.1.0", "django-mailbox==4.10.1", "django-model-utils==5.0.0", @@ -35,6 +34,7 @@ dependencies = [ "django-storages==1.14.6", "django-stubs==5.2.7", "django-summernote==0.8.20.0", + "django-unfold>=0.71.0", "django-widget-tweaks==1.5.0", "django-md-field==0.1.0", "djangorestframework==3.16.1", @@ -87,7 +87,7 @@ linting = [ "isort==7.0.0", "mypy==1.18.2", "mypy-extensions==1.1.0", - "ruff==0.14.4", + "ruff==0.14.5", "celery-stubs==0.1.3", ] openai = ["openai==2.6.1"] diff --git a/supervisor/package.json b/supervisor/package.json deleted file mode 100644 index 7ec53ad4..00000000 --- a/supervisor/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "supervisor", - "version": "1.0.0", - "description": "Supervisor is a custom dashboard application for eVibes", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "WISELESS team", - "license": "../LICENSE" -} diff --git a/uv.lock b/uv.lock index f0832e8d..28e37571 100644 --- a/uv.lock +++ b/uv.lock @@ -874,18 +874,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/7f/49ba63f078015b0a52e09651b94ba16b41154ac7079c83153edd14e15ca0/django_health_check-3.20.0-py3-none-any.whl", hash = "sha256:bcb2b8f36f463cead0564a028345c5b17e2a2d18e9cc88ecd611b13a26521926", size = 31788, upload-time = "2025-06-16T09:22:32.069Z" }, ] -[[package]] -name = "django-jazzmin" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "django" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/84/96/21b6255e90d92a3eb4e93bea9376635d54258e0353ebb913a55e40ae9254/django_jazzmin-3.0.1.tar.gz", hash = "sha256:67ae148bade41267a09ca8e4352ddefa6121795ebbac238bb9a6564ff841eb1b", size = 2053550, upload-time = "2024-10-08T17:40:59.771Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/5b/2f8c4b168e6c41bf1e4b14d787deb23d80f618f0693db913bbe208a4a907/django_jazzmin-3.0.1-py3-none-any.whl", hash = "sha256:12a0a4c1d4fd09c2eef22acf6a1f03112b515ba695c59faa8ea80efc81c1f21b", size = 2125957, upload-time = "2024-10-08T17:40:57.359Z" }, -] - [[package]] name = "django-js-asset" version = "3.1.2" @@ -1058,6 +1046,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/09/7a808392a751a24ffa62bec00e3085a9c1a151d728c323a5bab229ea0e58/django_timezone_field-7.1-py3-none-any.whl", hash = "sha256:93914713ed882f5bccda080eda388f7006349f25930b6122e9b07bf8db49c4b4", size = 13177, upload-time = "2025-01-11T17:49:52.142Z" }, ] +[[package]] +name = "django-unfold" +version = "0.71.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/5b/406eae1a429b15ba04f4dfaaf53aa64fb03bcfdc6bdd0753a41027aa3daa/django_unfold-0.71.0.tar.gz", hash = "sha256:995a296f1c15f172b0d8458ff12beb420ea7e9a666fa865a60ec03f70aaf4066", size = 1101347, upload-time = "2025-11-11T16:24:03.289Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/94/ad8ba84410655e0207ffcc7c6cba0875e9f79f914e3f2e2de883f706f7c9/django_unfold-0.71.0-py3-none-any.whl", hash = "sha256:76d4019aa9052ebe2e040d868be895d8581018fdf7debca943084aa0e79c2e31", size = 1213722, upload-time = "2025-11-11T16:24:01.985Z" }, +] + [[package]] name = "django-widget-tweaks" version = "1.5.0" @@ -1289,7 +1289,6 @@ dependencies = [ { name = "django-extensions" }, { name = "django-filter" }, { name = "django-health-check" }, - { name = "django-jazzmin" }, { name = "django-json-widget" }, { name = "django-mailbox" }, { name = "django-md-field" }, @@ -1302,6 +1301,7 @@ dependencies = [ { name = "django-storages" }, { name = "django-stubs" }, { name = "django-summernote" }, + { name = "django-unfold" }, { name = "django-widget-tweaks" }, { name = "djangorestframework" }, { name = "djangorestframework-camel-case" }, @@ -1394,7 +1394,6 @@ requires-dist = [ { name = "django-extensions", specifier = "==4.1" }, { name = "django-filter", specifier = "==25.2" }, { name = "django-health-check", specifier = "==3.20.0" }, - { name = "django-jazzmin", specifier = "==3.0.1" }, { name = "django-json-widget", specifier = "==2.1.0" }, { name = "django-mailbox", specifier = "==4.10.1" }, { name = "django-md-field", specifier = "==0.1.0" }, @@ -1407,6 +1406,7 @@ requires-dist = [ { name = "django-storages", specifier = "==1.14.6" }, { name = "django-stubs", specifier = "==5.2.7" }, { name = "django-summernote", specifier = "==0.8.20.0" }, + { name = "django-unfold", specifier = ">=0.71.0" }, { name = "django-widget-tweaks", specifier = "==1.5.0" }, { name = "djangorestframework", specifier = "==3.16.1" }, { name = "djangorestframework-camel-case", specifier = "==1.4.2" }, @@ -1444,7 +1444,7 @@ requires-dist = [ { name = "python-slugify", specifier = "==8.0.4" }, { name = "redis", specifier = "==7.0.1" }, { name = "requests", specifier = "==2.32.5" }, - { name = "ruff", marker = "extra == 'linting'", specifier = "==0.14.4" }, + { name = "ruff", marker = "extra == 'linting'", specifier = "==0.14.5" }, { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.44.0" }, { name = "six", specifier = "==1.17.0" }, { name = "sphinx", marker = "extra == 'docs'", specifier = "==8.2.3" }, @@ -3345,28 +3345,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.4" +version = "0.14.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/55/cccfca45157a2031dcbb5a462a67f7cf27f8b37d4b3b1cd7438f0f5c1df6/ruff-0.14.4.tar.gz", hash = "sha256:f459a49fe1085a749f15414ca76f61595f1a2cc8778ed7c279b6ca2e1fd19df3", size = 5587844, upload-time = "2025-11-06T22:07:45.033Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/fa/fbb67a5780ae0f704876cb8ac92d6d76da41da4dc72b7ed3565ab18f2f52/ruff-0.14.5.tar.gz", hash = "sha256:8d3b48d7d8aad423d3137af7ab6c8b1e38e4de104800f0d596990f6ada1a9fc1", size = 5615944, upload-time = "2025-11-13T19:58:51.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/b9/67240254166ae1eaa38dec32265e9153ac53645a6c6670ed36ad00722af8/ruff-0.14.4-py3-none-linux_armv6l.whl", hash = "sha256:e6604613ffbcf2297cd5dcba0e0ac9bd0c11dc026442dfbb614504e87c349518", size = 12606781, upload-time = "2025-11-06T22:07:01.841Z" }, - { url = "https://files.pythonhosted.org/packages/46/c8/09b3ab245d8652eafe5256ab59718641429f68681ee713ff06c5c549f156/ruff-0.14.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d99c0b52b6f0598acede45ee78288e5e9b4409d1ce7f661f0fa36d4cbeadf9a4", size = 12946765, upload-time = "2025-11-06T22:07:05.858Z" }, - { url = "https://files.pythonhosted.org/packages/14/bb/1564b000219144bf5eed2359edc94c3590dd49d510751dad26202c18a17d/ruff-0.14.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9358d490ec030f1b51d048a7fd6ead418ed0826daf6149e95e30aa67c168af33", size = 11928120, upload-time = "2025-11-06T22:07:08.023Z" }, - { url = "https://files.pythonhosted.org/packages/a3/92/d5f1770e9988cc0742fefaa351e840d9aef04ec24ae1be36f333f96d5704/ruff-0.14.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b40d27924f1f02dfa827b9c0712a13c0e4b108421665322218fc38caf615c2", size = 12370877, upload-time = "2025-11-06T22:07:10.015Z" }, - { url = "https://files.pythonhosted.org/packages/e2/29/e9282efa55f1973d109faf839a63235575519c8ad278cc87a182a366810e/ruff-0.14.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f5e649052a294fe00818650712083cddc6cc02744afaf37202c65df9ea52efa5", size = 12408538, upload-time = "2025-11-06T22:07:13.085Z" }, - { url = "https://files.pythonhosted.org/packages/8e/01/930ed6ecfce130144b32d77d8d69f5c610e6d23e6857927150adf5d7379a/ruff-0.14.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa082a8f878deeba955531f975881828fd6afd90dfa757c2b0808aadb437136e", size = 13141942, upload-time = "2025-11-06T22:07:15.386Z" }, - { url = "https://files.pythonhosted.org/packages/6a/46/a9c89b42b231a9f487233f17a89cbef9d5acd538d9488687a02ad288fa6b/ruff-0.14.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1043c6811c2419e39011890f14d0a30470f19d47d197c4858b2787dfa698f6c8", size = 14544306, upload-time = "2025-11-06T22:07:17.631Z" }, - { url = "https://files.pythonhosted.org/packages/78/96/9c6cf86491f2a6d52758b830b89b78c2ae61e8ca66b86bf5a20af73d20e6/ruff-0.14.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9f3a936ac27fb7c2a93e4f4b943a662775879ac579a433291a6f69428722649", size = 14210427, upload-time = "2025-11-06T22:07:19.832Z" }, - { url = "https://files.pythonhosted.org/packages/71/f4/0666fe7769a54f63e66404e8ff698de1dcde733e12e2fd1c9c6efb689cb5/ruff-0.14.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95643ffd209ce78bc113266b88fba3d39e0461f0cbc8b55fb92505030fb4a850", size = 13658488, upload-time = "2025-11-06T22:07:22.32Z" }, - { url = "https://files.pythonhosted.org/packages/ee/79/6ad4dda2cfd55e41ac9ed6d73ef9ab9475b1eef69f3a85957210c74ba12c/ruff-0.14.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:456daa2fa1021bc86ca857f43fe29d5d8b3f0e55e9f90c58c317c1dcc2afc7b5", size = 13354908, upload-time = "2025-11-06T22:07:24.347Z" }, - { url = "https://files.pythonhosted.org/packages/b5/60/f0b6990f740bb15c1588601d19d21bcc1bd5de4330a07222041678a8e04f/ruff-0.14.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f911bba769e4a9f51af6e70037bb72b70b45a16db5ce73e1f72aefe6f6d62132", size = 13587803, upload-time = "2025-11-06T22:07:26.327Z" }, - { url = "https://files.pythonhosted.org/packages/c9/da/eaaada586f80068728338e0ef7f29ab3e4a08a692f92eb901a4f06bbff24/ruff-0.14.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:76158a7369b3979fa878612c623a7e5430c18b2fd1c73b214945c2d06337db67", size = 12279654, upload-time = "2025-11-06T22:07:28.46Z" }, - { url = "https://files.pythonhosted.org/packages/66/d4/b1d0e82cf9bf8aed10a6d45be47b3f402730aa2c438164424783ac88c0ed/ruff-0.14.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f3b8f3b442d2b14c246e7aeca2e75915159e06a3540e2f4bed9f50d062d24469", size = 12357520, upload-time = "2025-11-06T22:07:31.468Z" }, - { url = "https://files.pythonhosted.org/packages/04/f4/53e2b42cc82804617e5c7950b7079d79996c27e99c4652131c6a1100657f/ruff-0.14.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c62da9a06779deecf4d17ed04939ae8b31b517643b26370c3be1d26f3ef7dbde", size = 12719431, upload-time = "2025-11-06T22:07:33.831Z" }, - { url = "https://files.pythonhosted.org/packages/a2/94/80e3d74ed9a72d64e94a7b7706b1c1ebaa315ef2076fd33581f6a1cd2f95/ruff-0.14.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5a443a83a1506c684e98acb8cb55abaf3ef725078be40237463dae4463366349", size = 13464394, upload-time = "2025-11-06T22:07:35.905Z" }, - { url = "https://files.pythonhosted.org/packages/54/1a/a49f071f04c42345c793d22f6cf5e0920095e286119ee53a64a3a3004825/ruff-0.14.4-py3-none-win32.whl", hash = "sha256:643b69cb63cd996f1fc7229da726d07ac307eae442dd8974dbc7cf22c1e18fff", size = 12493429, upload-time = "2025-11-06T22:07:38.43Z" }, - { url = "https://files.pythonhosted.org/packages/bc/22/e58c43e641145a2b670328fb98bc384e20679b5774258b1e540207580266/ruff-0.14.4-py3-none-win_amd64.whl", hash = "sha256:26673da283b96fe35fa0c939bf8411abec47111644aa9f7cfbd3c573fb125d2c", size = 13635380, upload-time = "2025-11-06T22:07:40.496Z" }, - { url = "https://files.pythonhosted.org/packages/30/bd/4168a751ddbbf43e86544b4de8b5c3b7be8d7167a2a5cb977d274e04f0a1/ruff-0.14.4-py3-none-win_arm64.whl", hash = "sha256:dd09c292479596b0e6fec8cd95c65c3a6dc68e9ad17b8f2382130f87ff6a75bb", size = 12663065, upload-time = "2025-11-06T22:07:42.603Z" }, + { url = "https://files.pythonhosted.org/packages/68/31/c07e9c535248d10836a94e4f4e8c5a31a1beed6f169b31405b227872d4f4/ruff-0.14.5-py3-none-linux_armv6l.whl", hash = "sha256:f3b8248123b586de44a8018bcc9fefe31d23dda57a34e6f0e1e53bd51fd63594", size = 13171630, upload-time = "2025-11-13T19:57:54.894Z" }, + { url = "https://files.pythonhosted.org/packages/8e/5c/283c62516dca697cd604c2796d1487396b7a436b2f0ecc3fd412aca470e0/ruff-0.14.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f7a75236570318c7a30edd7f5491945f0169de738d945ca8784500b517163a72", size = 13413925, upload-time = "2025-11-13T19:57:59.181Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f3/aa319f4afc22cb6fcba2b9cdfc0f03bbf747e59ab7a8c5e90173857a1361/ruff-0.14.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d146132d1ee115f8802356a2dc9a634dbf58184c51bff21f313e8cd1c74899a", size = 12574040, upload-time = "2025-11-13T19:58:02.056Z" }, + { url = "https://files.pythonhosted.org/packages/f9/7f/cb5845fcc7c7e88ed57f58670189fc2ff517fe2134c3821e77e29fd3b0c8/ruff-0.14.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2380596653dcd20b057794d55681571a257a42327da8894b93bbd6111aa801f", size = 13009755, upload-time = "2025-11-13T19:58:05.172Z" }, + { url = "https://files.pythonhosted.org/packages/21/d2/bcbedbb6bcb9253085981730687ddc0cc7b2e18e8dc13cf4453de905d7a0/ruff-0.14.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d1fa985a42b1f075a098fa1ab9d472b712bdb17ad87a8ec86e45e7fa6273e68", size = 12937641, upload-time = "2025-11-13T19:58:08.345Z" }, + { url = "https://files.pythonhosted.org/packages/a4/58/e25de28a572bdd60ffc6bb71fc7fd25a94ec6a076942e372437649cbb02a/ruff-0.14.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88f0770d42b7fa02bbefddde15d235ca3aa24e2f0137388cc15b2dcbb1f7c7a7", size = 13610854, upload-time = "2025-11-13T19:58:11.419Z" }, + { url = "https://files.pythonhosted.org/packages/7d/24/43bb3fd23ecee9861970978ea1a7a63e12a204d319248a7e8af539984280/ruff-0.14.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3676cb02b9061fee7294661071c4709fa21419ea9176087cb77e64410926eb78", size = 15061088, upload-time = "2025-11-13T19:58:14.551Z" }, + { url = "https://files.pythonhosted.org/packages/23/44/a022f288d61c2f8c8645b24c364b719aee293ffc7d633a2ca4d116b9c716/ruff-0.14.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b595bedf6bc9cab647c4a173a61acf4f1ac5f2b545203ba82f30fcb10b0318fb", size = 14734717, upload-time = "2025-11-13T19:58:17.518Z" }, + { url = "https://files.pythonhosted.org/packages/58/81/5c6ba44de7e44c91f68073e0658109d8373b0590940efe5bd7753a2585a3/ruff-0.14.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f55382725ad0bdb2e8ee2babcbbfb16f124f5a59496a2f6a46f1d9d99d93e6e2", size = 14028812, upload-time = "2025-11-13T19:58:20.533Z" }, + { url = "https://files.pythonhosted.org/packages/ad/ef/41a8b60f8462cb320f68615b00299ebb12660097c952c600c762078420f8/ruff-0.14.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7497d19dce23976bdaca24345ae131a1d38dcfe1b0850ad8e9e6e4fa321a6e19", size = 13825656, upload-time = "2025-11-13T19:58:23.345Z" }, + { url = "https://files.pythonhosted.org/packages/7c/00/207e5de737fdb59b39eb1fac806904fe05681981b46d6a6db9468501062e/ruff-0.14.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:410e781f1122d6be4f446981dd479470af86537fb0b8857f27a6e872f65a38e4", size = 13959922, upload-time = "2025-11-13T19:58:26.537Z" }, + { url = "https://files.pythonhosted.org/packages/bc/7e/fa1f5c2776db4be405040293618846a2dece5c70b050874c2d1f10f24776/ruff-0.14.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c01be527ef4c91a6d55e53b337bfe2c0f82af024cc1a33c44792d6844e2331e1", size = 12932501, upload-time = "2025-11-13T19:58:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/67/d8/d86bf784d693a764b59479a6bbdc9515ae42c340a5dc5ab1dabef847bfaa/ruff-0.14.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f66e9bb762e68d66e48550b59c74314168ebb46199886c5c5aa0b0fbcc81b151", size = 12927319, upload-time = "2025-11-13T19:58:32.923Z" }, + { url = "https://files.pythonhosted.org/packages/ac/de/ee0b304d450ae007ce0cb3e455fe24fbcaaedae4ebaad6c23831c6663651/ruff-0.14.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d93be8f1fa01022337f1f8f3bcaa7ffee2d0b03f00922c45c2207954f351f465", size = 13206209, upload-time = "2025-11-13T19:58:35.952Z" }, + { url = "https://files.pythonhosted.org/packages/33/aa/193ca7e3a92d74f17d9d5771a765965d2cf42c86e6f0fd95b13969115723/ruff-0.14.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c135d4b681f7401fe0e7312017e41aba9b3160861105726b76cfa14bc25aa367", size = 13953709, upload-time = "2025-11-13T19:58:39.002Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f1/7119e42aa1d3bf036ffc9478885c2e248812b7de9abea4eae89163d2929d/ruff-0.14.5-py3-none-win32.whl", hash = "sha256:c83642e6fccfb6dea8b785eb9f456800dcd6a63f362238af5fc0c83d027dd08b", size = 12925808, upload-time = "2025-11-13T19:58:42.779Z" }, + { url = "https://files.pythonhosted.org/packages/3b/9d/7c0a255d21e0912114784e4a96bf62af0618e2190cae468cd82b13625ad2/ruff-0.14.5-py3-none-win_amd64.whl", hash = "sha256:9d55d7af7166f143c94eae1db3312f9ea8f95a4defef1979ed516dbb38c27621", size = 14331546, upload-time = "2025-11-13T19:58:45.691Z" }, + { url = "https://files.pythonhosted.org/packages/e5/80/69756670caedcf3b9be597a6e12276a6cf6197076eb62aad0c608f8efce0/ruff-0.14.5-py3-none-win_arm64.whl", hash = "sha256:4b700459d4649e2594b31f20a9de33bc7c19976d4746d8d0798ad959621d64a4", size = 13433331, upload-time = "2025-11-13T19:58:48.434Z" }, ] [[package]] From 376c73ba26fc6d3dd03ad31d48fcd6c517dc8f72 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 15 Nov 2025 02:29:23 +0300 Subject: [PATCH 04/18] Features: 1) Add tab support for inline admin classes; 2) Introduce new settings for taskboard URL and support contact; Fixes: 1) Remove redundant imports from admin.py; Extra: 1) Update inline classes to inherit from TabularInline; 2) Add unfold.contrib modules to INSTALLED_APPS; 3) Reorder imports in admin.py for consistency. --- engine/blog/admin.py | 6 +- engine/core/admin.py | 31 ++++----- engine/payments/admin.py | 8 +-- engine/vibes_auth/admin.py | 26 ++++---- evibes/settings/base.py | 6 ++ evibes/settings/unfold.py | 128 +++++++++++++++++++++++++++++++------ 6 files changed, 148 insertions(+), 57 deletions(-) diff --git a/engine/blog/admin.py b/engine/blog/admin.py index 611edfe2..c5117a14 100644 --- a/engine/blog/admin.py +++ b/engine/blog/admin.py @@ -1,10 +1,10 @@ -from django.contrib.admin import ModelAdmin, register +from django.contrib.admin import register from django_summernote.admin import SummernoteModelAdminMixin +from unfold.admin import ModelAdmin +from engine.blog.models import Post, PostTag from engine.core.admin import ActivationActionsMixin, FieldsetsMixin -from .models import Post, PostTag - @register(Post) class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] diff --git a/engine/core/admin.py b/engine/core/admin.py index 900a7bb2..fba4a8ec 100644 --- a/engine/core/admin.py +++ b/engine/core/admin.py @@ -5,7 +5,7 @@ from constance.admin import Config from constance.admin import ConstanceAdmin as BaseConstanceAdmin from django.apps import AppConfig, apps from django.conf import settings -from django.contrib.admin import ModelAdmin, TabularInline, action, register, site +from django.contrib.admin import register, site from django.contrib.gis.admin import GISModelAdmin from django.contrib.messages import constants as messages from django.db.models import Model @@ -15,6 +15,8 @@ from django.utils.translation import gettext_lazy as _ from modeltranslation.translator import NotRegistered, translator from modeltranslation.utils import get_translation_fields from mptt.admin import DraggableMPTTAdmin +from unfold.admin import ModelAdmin, TabularInline +from unfold.decorators import action from engine.core.forms import CRMForm, OrderForm, OrderProductForm, StockForm, VendorForm from engine.core.models import ( @@ -65,15 +67,15 @@ class FieldsetsMixin: for orig in transoptions.local_fields: translation_fields += get_translation_fields(orig) if translation_fields: - fss = list(fss) + [(_("translations"), {"fields": translation_fields})] # type: ignore [list-item] + fss = list(fss) + [(_("translations"), {"classes": ["tab"], "fields": translation_fields})] # type: ignore [list-item] return fss if self.general_fields: - fieldsets.append((_("general"), {"fields": self.general_fields})) + fieldsets.append((_("general"), {"classes": ["tab"], "fields": self.general_fields})) if self.relation_fields: - fieldsets.append((_("relations"), {"fields": self.relation_fields})) + fieldsets.append((_("relations"), {"classes": ["tab"], "fields": self.relation_fields})) if self.additional_fields: - fieldsets.append((_("additional info"), {"fields": self.additional_fields})) + fieldsets.append((_("additional info"), {"classes": ["tab"], "fields": self.additional_fields})) opts = self.model._meta meta_fields = [] @@ -91,14 +93,14 @@ class FieldsetsMixin: meta_fields.append("human_readable_id") if meta_fields: - fieldsets.append((_("metadata"), {"fields": meta_fields})) + fieldsets.append((_("metadata"), {"classes": ["tab"], "fields": meta_fields})) ts = [] for name in ("created", "modified"): if any(f.name == name for f in opts.fields): ts.append(name) if ts: - fieldsets.append((_("timestamps"), {"fields": ts, "classes": ["collapse"]})) + fieldsets.append((_("timestamps"), {"classes": ["tab"], "fields": ts})) fieldsets = add_translations_fieldset(fieldsets) # type: ignore [arg-type, assignment] return fieldsets # type: ignore [return-value] @@ -140,10 +142,9 @@ class AttributeValueInline(TabularInline): # type: ignore [type-arg] model = AttributeValue extra = 0 autocomplete_fields = ["attribute"] - is_navtab = True verbose_name = _("attribute value") verbose_name_plural = _("attribute values") - icon = "fa-solid fa-list-ul" + tab = True def get_queryset(self, request): return super().get_queryset(request).select_related("attribute", "product") @@ -152,10 +153,9 @@ class AttributeValueInline(TabularInline): # type: ignore [type-arg] class ProductImageInline(TabularInline): # type: ignore [type-arg] model = ProductImage extra = 0 - is_navtab = True + tab = True verbose_name = _("image") verbose_name_plural = _("images") - icon = "fa-regular fa-images" def get_queryset(self, request): return super().get_queryset(request).select_related("product") @@ -165,10 +165,9 @@ class StockInline(TabularInline): # type: ignore [type-arg] model = Stock extra = 0 form = StockForm - is_navtab = True + tab = True verbose_name = _("stock") verbose_name_plural = _("stocks") - icon = "fa-solid fa-boxes-stacked" def get_queryset(self, request): return super().get_queryset(request).select_related("vendor", "product") @@ -179,10 +178,9 @@ class OrderProductInline(TabularInline): # type: ignore [type-arg] extra = 0 readonly_fields = ("product", "quantity", "buy_price") form = OrderProductForm - is_navtab = True verbose_name = _("order product") verbose_name_plural = _("order products") - icon = "fa-solid fa-boxes-packing" + tab = True def get_queryset(self, request): return super().get_queryset(request).select_related("product").only("product__name") @@ -193,10 +191,9 @@ class CategoryChildrenInline(TabularInline): # type: ignore [type-arg] fk_name = "parent" extra = 0 fields = ("name", "description", "is_active", "image", "markup_percent") - is_navtab = True + tab = True verbose_name = _("children") verbose_name_plural = _("children") - icon = "fa-solid fa-leaf" @register(AttributeGroup) diff --git a/engine/payments/admin.py b/engine/payments/admin.py index 78d54b63..4cd4b905 100644 --- a/engine/payments/admin.py +++ b/engine/payments/admin.py @@ -1,15 +1,15 @@ -from django.contrib import admin -from django.contrib.admin import ModelAdmin, register +from django.contrib.admin import register from django.db.models import QuerySet from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ +from unfold.admin import ModelAdmin, TabularInline from engine.core.admin import ActivationActionsMixin from engine.payments.forms import GatewayForm, TransactionForm -from engine.payments.models import Balance, Transaction, Gateway +from engine.payments.models import Balance, Gateway, Transaction -class TransactionInline(admin.TabularInline): # type: ignore [type-arg] +class TransactionInline(TabularInline): # type: ignore [type-arg] model = Transaction form = TransactionForm extra = 1 diff --git a/engine/vibes_auth/admin.py b/engine/vibes_auth/admin.py index f761beed..307c7cf4 100644 --- a/engine/vibes_auth/admin.py +++ b/engine/vibes_auth/admin.py @@ -1,6 +1,7 @@ from typing import Any from django.contrib import admin +from django.contrib.admin import register from django.contrib.auth.admin import ( GroupAdmin as BaseGroupAdmin, ) @@ -25,6 +26,7 @@ from rest_framework_simplejwt.token_blacklist.models import ( from rest_framework_simplejwt.token_blacklist.models import ( OutstandingToken as BaseOutstandingToken, ) +from unfold.admin import ModelAdmin, TabularInline from engine.core.admin import ActivationActionsMixin from engine.core.models import Order @@ -32,16 +34,16 @@ from engine.payments.models import Balance from engine.vibes_auth.forms import UserForm from engine.vibes_auth.models import ( BlacklistedToken, - Group, - OutstandingToken, - User, ChatMessage, ChatThread, + Group, + OutstandingToken, ThreadStatus, + User, ) -class BalanceInline(admin.TabularInline): # type: ignore [type-arg] +class BalanceInline(TabularInline): # type: ignore [type-arg] model = Balance can_delete = False extra = 0 @@ -51,7 +53,7 @@ class BalanceInline(admin.TabularInline): # type: ignore [type-arg] icon = "fa-solid fa-wallet" -class OrderInline(admin.TabularInline): # type: ignore [type-arg] +class OrderInline(TabularInline): # type: ignore [type-arg] model = Order extra = 0 verbose_name = _("order") @@ -60,7 +62,7 @@ class OrderInline(admin.TabularInline): # type: ignore [type-arg] icon = "fa-solid fa-cart-shopping" -class UserAdmin(ActivationActionsMixin, BaseUserAdmin): # type: ignore [misc, type-arg] +class UserAdmin(ActivationActionsMixin, BaseUserAdmin, ModelAdmin): # type: ignore [misc, type-arg] inlines = (BalanceInline, OrderInline) fieldsets = ( (None, {"fields": ("email", "password")}), @@ -125,8 +127,8 @@ class UserAdmin(ActivationActionsMixin, BaseUserAdmin): # type: ignore [misc, t # noinspection PyUnusedLocal -@admin.register(ChatThread) -class ChatThreadAdmin(admin.ModelAdmin): +@register(ChatThread) +class ChatThreadAdmin(ModelAdmin): list_display = ( "uuid", "user", @@ -161,7 +163,7 @@ class ChatThreadAdmin(admin.ModelAdmin): queryset.update(status=ThreadStatus.OPEN) -@admin.register(ChatMessage) +@register(ChatMessage) class ChatMessageAdmin(admin.ModelAdmin): list_display = ("uuid", "thread", "sender_type", "sender_user", "sent_at") list_filter = ("sender_type",) @@ -170,15 +172,15 @@ class ChatMessageAdmin(admin.ModelAdmin): readonly_fields = ("created", "modified") -class GroupAdmin(BaseGroupAdmin): +class GroupAdmin(BaseGroupAdmin, ModelAdmin): pass -class BlacklistedTokenAdmin(BaseBlacklistedTokenAdmin): +class BlacklistedTokenAdmin(BaseBlacklistedTokenAdmin, ModelAdmin): pass -class OutstandingTokenAdmin(BaseOutstandingTokenAdmin): +class OutstandingTokenAdmin(BaseOutstandingTokenAdmin, ModelAdmin): pass diff --git a/evibes/settings/base.py b/evibes/settings/base.py index aae74e7f..298a8bf5 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -10,6 +10,10 @@ EVIBES_VERSION = "2025.4" RELEASE_DATE = datetime(2025, 11, 9) PROJECT_NAME = getenv("EVIBES_PROJECT_NAME", "eVibes") +TASKBOARD_URL = getenv( + "EVIBES_TASKBOARD_URL", "https://plane.wiseless.xyz/spaces/issues/dd33cb0ab9b04ef08a10f7eefae6d90c/?board=kanban" +) +SUPPORT_CONTACT = getenv("EVIBES_SUPPORT_CONTACT", "https://t.me/fureunoir") BASE_DIR: Path = Path(__file__).resolve().parent.parent.parent INITIALIZED: bool = (BASE_DIR / ".initialized").exists() @@ -108,6 +112,8 @@ INSTALLED_APPS: list[str] = [ "unfold", "unfold.contrib.filters", "unfold.contrib.forms", + "unfold.contrib.inlines", + "unfold.contrib.constance", "modeltranslation", "django.contrib.admin", "django.contrib.admindocs", diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index 4fe4feaa..0e3bca04 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -1,28 +1,114 @@ -"""django-unfold configuration. +from django.templatetags.static import static +from django.urls import reverse_lazy +from django.utils.translation import gettext_lazy as _ -This module defines branding for the Django admin using django-unfold. -It intentionally avoids database-backed configuration (e.g., Constance) -so that it is safe during initial migrations and in all environments. -""" +from evibes.settings.base import PROJECT_NAME, SUPPORT_CONTACT, TASKBOARD_URL -from evibes.settings.base import PROJECT_NAME - -# See django-unfold documentation for all available options. -# Only minimal, production-safe branding is configured here. UNFOLD = { - # Text shown in the browser title bar and in the admin header - "SITE_TITLE": f"{PROJECT_NAME} Admin", + "SITE_TITLE": f"{PROJECT_NAME} Dashboard", "SITE_HEADER": PROJECT_NAME, - # Optional URL the header/brand links to (leave default admin index) - # "SITE_URL": "/admin/", - # Logos and favicon served via Django staticfiles - # Files are expected at: engine/core/static/logo.png, favicon.ico, favicon.png - # Refer to them by their static URL path (relative), no leading slash. "SITE_LOGO": "logo.png", - # If you use a different logo for dark theme, set SITE_LOGO_DARK - # Otherwise Unfold will reuse SITE_LOGO - # "SITE_LOGO_DARK": "logo.png", "SITE_ICON": "favicon.ico", - # Sidebar behavior, search etc. (keep defaults minimal) - # Unfold automatically respects user OS light/dark theme; no forcing here. + "SHOW_LANGUAGES": True, + "LOGIN": { + "image": lambda request: static("logo.png"), + }, + "COMMAND": { + "search_models": True, + "show_history": True, + }, + "EXTENSIONS": { + "modeltranslation": { + "flags": { + "ar-ar": "🇸🇦", + "cs-cz": "🇨🇿", + "da-dk": "🇩🇰", + "de-de": "🇩🇪", + "en-gb": "🇬🇧", + "en-us": "🇺🇸", + "es-es": "🇪🇸", + "fa-ir": "🇮🇷", + "fr-fr": "🇫🇷", + "he-il": "🇮🇱", + "hi-in": "🇮🇳", + "hr-hr": "🇭🇷", + "id-id": "🇮🇩", + "it-it": "🇮🇹", + "ja-jp": "🇯🇵", + "kk-kz": "🇰🇿", + "ko-kr": "🇰🇷", + "nl-nl": "🇳🇱", + "no-no": "🇳🇴", + "pl-pl": "🇵🇱", + "pt-br": "🇧🇷", + "ro-ro": "🇷🇴", + "ru-ru": "🇷🇺", + "sv-se": "🇸🇪", + "th-th": "🇹🇭", + "tr-tr": "🇹🇷", + "vi-vn": "🇻🇳", + "zh-hans": "🇨🇳", + }, + }, + }, + "SIDEBAR": { + "show_search": True, + "navigation": [ + { + "title": _("Menu"), + "separator": True, + "collapsible": True, + "items": [ + { + "title": _("Dashboard"), + "icon": "dashboard", + "link": reverse_lazy("admin:index"), + }, + { + "title": _("Health"), + "icon": "health_metrics", + "link": reverse_lazy("health_check:health_check_home"), + }, + { + "title": _("Swagger"), + "icon": "integration_instructions", + "link": reverse_lazy("swagger-ui-platform"), + }, + { + "title": _("Redoc"), + "icon": "integration_instructions", + "link": reverse_lazy("redoc-ui-platform"), + }, + { + "title": _("GraphQL"), + "icon": "graph_5", + "link": reverse_lazy("graphql-platform"), + }, + { + "title": _("Taskboard"), + "icon": "view_kanban", + "link": TASKBOARD_URL, + }, + { + "title": _("Support"), + "icon": "contact_support", + "link": SUPPORT_CONTACT, + }, + ], + }, + ], + }, + "TABS": [ + { + "models": [ + "core.product", + ], + "items": [ + { + "title": _("Your custom title"), + "link": reverse_lazy("admin:core_product_changelist"), + }, + ], + }, + ], } From e4bf40c48e5dba23744f2264c7367179de556697 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 15 Nov 2025 02:49:48 +0300 Subject: [PATCH 05/18] Features: 1) Add support for xlrd and xlwt packages; 2) Enhance admin interface with Celery beat models and forms. Fixes: 1) Import missing Celery beat admin classes and forms. Extra: 1) Update package metadata with latest wheel and sdist URLs; 2) Align import statements with new structure. --- engine/core/admin.py | 98 ++++++++++++++---- evibes/settings/base.py | 3 + evibes/settings/unfold.py | 30 +++--- pyproject.toml | 2 + uv.lock | 204 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 303 insertions(+), 34 deletions(-) diff --git a/engine/core/admin.py b/engine/core/admin.py index fba4a8ec..f6e416f2 100644 --- a/engine/core/admin.py +++ b/engine/core/admin.py @@ -12,11 +12,26 @@ from django.db.models import Model from django.db.models.query import QuerySet from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ +from django_celery_beat.admin import ClockedScheduleAdmin as BaseClockedScheduleAdmin +from django_celery_beat.admin import CrontabScheduleAdmin as BaseCrontabScheduleAdmin +from django_celery_beat.admin import PeriodicTaskAdmin as BasePeriodicTaskAdmin +from django_celery_beat.admin import PeriodicTaskForm, TaskSelectWidget +from django_celery_beat.models import ( + ClockedSchedule, + CrontabSchedule, + IntervalSchedule, + PeriodicTask, + SolarSchedule, +) +from djangoql.admin import DjangoQLSearchMixin +from import_export.admin import ImportExportModelAdmin from modeltranslation.translator import NotRegistered, translator from modeltranslation.utils import get_translation_fields from mptt.admin import DraggableMPTTAdmin from unfold.admin import ModelAdmin, TabularInline +from unfold.contrib.import_export.forms import ExportForm, ImportForm from unfold.decorators import action +from unfold.widgets import UnfoldAdminSelectWidget, UnfoldAdminTextInputWidget from engine.core.forms import CRMForm, OrderForm, OrderProductForm, StockForm, VendorForm from engine.core.models import ( @@ -197,7 +212,7 @@ class CategoryChildrenInline(TabularInline): # type: ignore [type-arg] @register(AttributeGroup) -class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class AttributeGroupAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = AttributeGroup # type: ignore [misc] list_display = ( @@ -221,7 +236,7 @@ class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): @register(Attribute) -class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class AttributeAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Attribute # type: ignore [misc] list_display = ( @@ -296,7 +311,7 @@ class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): @register(Category) -class CategoryAdmin(FieldsetsMixin, ActivationActionsMixin, DraggableMPTTAdmin): +class CategoryAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, DraggableMPTTAdmin, ModelAdmin): # noinspection PyClassVar model = Category list_display = ( @@ -345,7 +360,7 @@ class CategoryAdmin(FieldsetsMixin, ActivationActionsMixin, DraggableMPTTAdmin): @register(Brand) -class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class BrandAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Brand # type: ignore [misc] list_display = ( @@ -380,7 +395,7 @@ class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i @register(Product) -class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class ProductAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin, ImportExportModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Product # type: ignore [misc] list_display = ( @@ -429,6 +444,8 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ProductImageInline, StockInline, ] + import_form_class = ImportForm + export_form_class = ExportForm general_fields = [ "is_active", @@ -457,7 +474,7 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: @register(ProductTag) -class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class ProductTagAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = ProductTag # type: ignore [misc] list_display = ("tag_name",) @@ -475,7 +492,7 @@ class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # ty @register(CategoryTag) -class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class CategoryTagAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = CategoryTag # type: ignore [misc] list_display = ( @@ -501,7 +518,7 @@ class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # t @register(Vendor) -class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class VendorAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Vendor # type: ignore [misc] list_display = ( @@ -541,7 +558,7 @@ class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: @register(Feedback) -class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class FeedbackAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Feedback # type: ignore [misc] list_display = ( @@ -574,7 +591,7 @@ class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type @register(Order) -class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class OrderAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Order # type: ignore [misc] list_display = ( @@ -625,7 +642,7 @@ class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i @register(OrderProduct) -class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class OrderProductAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = OrderProduct # type: ignore [misc] list_display = ( @@ -663,7 +680,7 @@ class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # @register(PromoCode) -class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class PromoCodeAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = PromoCode # type: ignore [misc] list_display = ( @@ -707,7 +724,7 @@ class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ @register(Promotion) -class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class PromotionAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Promotion # type: ignore [misc] list_display = ( @@ -734,7 +751,7 @@ class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ @register(Stock) -class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class StockAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Stock # type: ignore [misc] form = StockForm @@ -782,7 +799,7 @@ class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i @register(Wishlist) -class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class WishlistAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Wishlist # type: ignore [misc] list_display = ( @@ -808,7 +825,7 @@ class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type @register(ProductImage) -class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class ProductImageAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = ProductImage # type: ignore [misc] list_display = ( @@ -844,7 +861,7 @@ class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # @register(Address) -class AddressAdmin(FieldsetsMixin, GISModelAdmin): # type: ignore [misc] +class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin): # type: ignore [misc] # noinspection PyClassVar model = Address # type: ignore [misc] list_display = ( @@ -894,7 +911,7 @@ class AddressAdmin(FieldsetsMixin, GISModelAdmin): # type: ignore [misc] @register(CustomerRelationshipManagementProvider) -class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class CustomerRelationshipManagementProviderAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = CustomerRelationshipManagementProvider # type: ignore [misc] list_display = ( @@ -923,7 +940,7 @@ class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin): @register(OrderCrmLink) -class OrderCrmLinkAdmin(FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] +class OrderCrmLinkAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = OrderCrmLink # type: ignore [misc] list_display = ( @@ -993,3 +1010,46 @@ site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore [list-item] site.site_title = settings.PROJECT_NAME site.site_header = "eVibes" site.index_title = settings.PROJECT_NAME + + +site.unregister(PeriodicTask) +site.unregister(IntervalSchedule) +site.unregister(CrontabSchedule) +site.unregister(SolarSchedule) +site.unregister(ClockedSchedule) + + +class UnfoldTaskSelectWidget(UnfoldAdminSelectWidget, TaskSelectWidget): + pass + + +class UnfoldPeriodicTaskForm(PeriodicTaskForm): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["task"].widget = UnfoldAdminTextInputWidget() + self.fields["regtask"].widget = UnfoldTaskSelectWidget() + + +@register(PeriodicTask) +class PeriodicTaskAdmin(BasePeriodicTaskAdmin, ModelAdmin): + form = UnfoldPeriodicTaskForm + + +@register(IntervalSchedule) +class IntervalScheduleAdmin(ModelAdmin): + pass + + +@register(CrontabSchedule) +class CrontabScheduleAdmin(BaseCrontabScheduleAdmin, ModelAdmin): + pass + + +@register(SolarSchedule) +class SolarScheduleAdmin(ModelAdmin): + pass + + +@register(ClockedSchedule) +class ClockedScheduleAdmin(BaseClockedScheduleAdmin, ModelAdmin): + pass diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 298a8bf5..3f0d742a 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -114,6 +114,7 @@ INSTALLED_APPS: list[str] = [ "unfold.contrib.forms", "unfold.contrib.inlines", "unfold.contrib.constance", + "unfold.contrib.import_export", "modeltranslation", "django.contrib.admin", "django.contrib.admindocs", @@ -151,6 +152,8 @@ INSTALLED_APPS: list[str] = [ "drf_spectacular_sidecar", "django_json_widget", "django_elasticsearch_dsl", + "djangoql", + "import_export", "dbbackup", "corsheaders", "constance.backends.database", diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index 0e3bca04..3b8e1610 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -7,11 +7,11 @@ from evibes.settings.base import PROJECT_NAME, SUPPORT_CONTACT, TASKBOARD_URL UNFOLD = { "SITE_TITLE": f"{PROJECT_NAME} Dashboard", "SITE_HEADER": PROJECT_NAME, - "SITE_LOGO": "logo.png", + "SITE_LOGO": "favicon.png", "SITE_ICON": "favicon.ico", "SHOW_LANGUAGES": True, "LOGIN": { - "image": lambda request: static("logo.png"), + "image": lambda request: static("favicon.png"), }, "COMMAND": { "search_models": True, @@ -98,17 +98,17 @@ UNFOLD = { }, ], }, - "TABS": [ - { - "models": [ - "core.product", - ], - "items": [ - { - "title": _("Your custom title"), - "link": reverse_lazy("admin:core_product_changelist"), - }, - ], - }, - ], + # "TABS": [ + # { + # "models": [ + # "core.product", + # ], + # "items": [ + # { + # "title": _("Your custom title"), + # "link": reverse_lazy("admin:core_product_changelist"), + # }, + # ], + # }, + # ], } diff --git a/pyproject.toml b/pyproject.toml index 9c213475..a429c981 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ dependencies = [ "django-extensions==4.1", "django-filter==25.2", "django-health-check==3.20.0", + "django-import-export[all]>=4.3.14", "django-json-widget==2.1.0", "django-mailbox==4.10.1", "django-model-utils==5.0.0", @@ -44,6 +45,7 @@ dependencies = [ "djangorestframework-stubs==3.16.5", "djangorestframework-xml==2.0.0", "djangorestframework-yaml==2.0.0", + "djangoql>=0.18.1", "drf-spectacular[sidecar]==0.29.0", "drf-spectacular-websocket>=1.3.1", "elasticsearch-dsl==8.18.0", diff --git a/uv.lock b/uv.lock index 28e37571..974b82fe 100644 --- a/uv.lock +++ b/uv.lock @@ -724,6 +724,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, ] +[[package]] +name = "diff-match-patch" +version = "20241021" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/ad/32e1777dd57d8e85fa31e3a243af66c538245b8d64b7265bec9a61f2ca33/diff_match_patch-20241021.tar.gz", hash = "sha256:beae57a99fa48084532935ee2968b8661db861862ec82c6f21f4acdd6d835073", size = 39962, upload-time = "2024-10-21T19:41:21.094Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/bb/2aa9b46a01197398b901e458974c20ed107935c26e44e37ad5b0e5511e44/diff_match_patch-20241021-py3-none-any.whl", hash = "sha256:93cea333fb8b2bc0d181b0de5e16df50dd344ce64828226bda07728818936782", size = 43252, upload-time = "2024-10-21T19:41:19.914Z" }, +] + [[package]] name = "distro" version = "1.9.0" @@ -874,6 +883,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/7f/49ba63f078015b0a52e09651b94ba16b41154ac7079c83153edd14e15ca0/django_health_check-3.20.0-py3-none-any.whl", hash = "sha256:bcb2b8f36f463cead0564a028345c5b17e2a2d18e9cc88ecd611b13a26521926", size = 31788, upload-time = "2025-06-16T09:22:32.069Z" }, ] +[[package]] +name = "django-import-export" +version = "4.3.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "diff-match-patch" }, + { name = "django" }, + { name = "tablib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/d7/0d7b0c26b1c665c6f462a418620d853328aeabbfe8b8d2a4decbcb58a398/django_import_export-4.3.14.tar.gz", hash = "sha256:224c7d909fec607378bc58271db38b9c6065982306aa644d26a529fcde64869e", size = 2234935, upload-time = "2025-11-13T10:06:45.793Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/11/cfd39f4c920a22c1f5954323e6d31834d11f097632c28e963f17d47a8d60/django_import_export-4.3.14-py3-none-any.whl", hash = "sha256:ce6484fa082a1cdb2bf4e0b60276d3e2a7f39f74c20ae663b2f8eebb54141a58", size = 156085, upload-time = "2025-11-13T10:06:43.903Z" }, +] + +[package.optional-dependencies] +all = [ + { name = "tablib", extra = ["all"] }, +] + [[package]] name = "django-js-asset" version = "3.1.2" @@ -1067,6 +1095,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/46/6a/6cb6deb5c38b785c77c3ba66f53051eada49205979c407323eb666930915/django_widget_tweaks-1.5.0-py3-none-any.whl", hash = "sha256:a41b7b2f05bd44d673d11ebd6c09a96f1d013ee98121cb98c384fe84e33b881e", size = 8960, upload-time = "2023-08-25T15:29:05.644Z" }, ] +[[package]] +name = "djangoql" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ply" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/0a/83cdb7b9d3b854b98941363153945f6c051b3bc50cd61108a85677c98c3a/djangoql-0.18.1-py2.py3-none-any.whl", hash = "sha256:51b3085a805627ebb43cfd0aa861137cdf8f69cc3c9244699718fe04a6c8e26d", size = 218209, upload-time = "2024-01-08T14:10:47.915Z" }, +] + [[package]] name = "djangorestframework" version = "3.16.1" @@ -1267,6 +1306,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294, upload-time = "2022-02-02T21:30:26.024Z" }, ] +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + [[package]] name = "evibes" version = "2025.4" @@ -1289,6 +1337,7 @@ dependencies = [ { name = "django-extensions" }, { name = "django-filter" }, { name = "django-health-check" }, + { name = "django-import-export", extra = ["all"] }, { name = "django-json-widget" }, { name = "django-mailbox" }, { name = "django-md-field" }, @@ -1303,6 +1352,7 @@ dependencies = [ { name = "django-summernote" }, { name = "django-unfold" }, { name = "django-widget-tweaks" }, + { name = "djangoql" }, { name = "djangorestframework" }, { name = "djangorestframework-camel-case" }, { name = "djangorestframework-recursive" }, @@ -1394,6 +1444,7 @@ requires-dist = [ { name = "django-extensions", specifier = "==4.1" }, { name = "django-filter", specifier = "==25.2" }, { name = "django-health-check", specifier = "==3.20.0" }, + { name = "django-import-export", extras = ["all"], specifier = ">=4.3.14" }, { name = "django-json-widget", specifier = "==2.1.0" }, { name = "django-mailbox", specifier = "==4.10.1" }, { name = "django-md-field", specifier = "==0.1.0" }, @@ -1408,6 +1459,7 @@ requires-dist = [ { name = "django-summernote", specifier = "==0.8.20.0" }, { name = "django-unfold", specifier = ">=0.71.0" }, { name = "django-widget-tweaks", specifier = "==1.5.0" }, + { name = "djangoql", specifier = ">=0.18.1" }, { name = "djangorestframework", specifier = "==3.16.1" }, { name = "djangorestframework-camel-case", specifier = "==1.4.2" }, { name = "djangorestframework-recursive", specifier = "==0.1.2" }, @@ -2545,6 +2597,56 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, ] +[[package]] +name = "numpy" +version = "2.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/f4/098d2270d52b41f1bd7db9fc288aaa0400cb48c2a3e2af6fa365d9720947/numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a", size = 20582187, upload-time = "2025-10-15T16:18:11.77Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/7a/02420400b736f84317e759291b8edaeee9dc921f72b045475a9cbdb26b17/numpy-2.3.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ef1b5a3e808bc40827b5fa2c8196151a4c5abe110e1726949d7abddfe5c7ae11", size = 20957727, upload-time = "2025-10-15T16:15:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/18/90/a014805d627aa5750f6f0e878172afb6454552da929144b3c07fcae1bb13/numpy-2.3.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2f91f496a87235c6aaf6d3f3d89b17dba64996abadccb289f48456cff931ca9", size = 14187262, upload-time = "2025-10-15T16:15:47.761Z" }, + { url = "https://files.pythonhosted.org/packages/c7/e4/0a94b09abe89e500dc748e7515f21a13e30c5c3fe3396e6d4ac108c25fca/numpy-2.3.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f77e5b3d3da652b474cc80a14084927a5e86a5eccf54ca8ca5cbd697bf7f2667", size = 5115992, upload-time = "2025-10-15T16:15:50.144Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/db77c75b055c6157cbd4f9c92c4458daef0dd9cbe6d8d2fe7f803cb64c37/numpy-2.3.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ab1c5f5ee40d6e01cbe96de5863e39b215a4d24e7d007cad56c7184fdf4aeef", size = 6648672, upload-time = "2025-10-15T16:15:52.442Z" }, + { url = "https://files.pythonhosted.org/packages/e1/e6/e31b0d713719610e406c0ea3ae0d90760465b086da8783e2fd835ad59027/numpy-2.3.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77b84453f3adcb994ddbd0d1c5d11db2d6bda1a2b7fd5ac5bd4649d6f5dc682e", size = 14284156, upload-time = "2025-10-15T16:15:54.351Z" }, + { url = "https://files.pythonhosted.org/packages/f9/58/30a85127bfee6f108282107caf8e06a1f0cc997cb6b52cdee699276fcce4/numpy-2.3.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4121c5beb58a7f9e6dfdee612cb24f4df5cd4db6e8261d7f4d7450a997a65d6a", size = 16641271, upload-time = "2025-10-15T16:15:56.67Z" }, + { url = "https://files.pythonhosted.org/packages/06/f2/2e06a0f2adf23e3ae29283ad96959267938d0efd20a2e25353b70065bfec/numpy-2.3.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:65611ecbb00ac9846efe04db15cbe6186f562f6bb7e5e05f077e53a599225d16", size = 16059531, upload-time = "2025-10-15T16:15:59.412Z" }, + { url = "https://files.pythonhosted.org/packages/b0/e7/b106253c7c0d5dc352b9c8fab91afd76a93950998167fa3e5afe4ef3a18f/numpy-2.3.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dabc42f9c6577bcc13001b8810d300fe814b4cfbe8a92c873f269484594f9786", size = 18578983, upload-time = "2025-10-15T16:16:01.804Z" }, + { url = "https://files.pythonhosted.org/packages/73/e3/04ecc41e71462276ee867ccbef26a4448638eadecf1bc56772c9ed6d0255/numpy-2.3.4-cp312-cp312-win32.whl", hash = "sha256:a49d797192a8d950ca59ee2d0337a4d804f713bb5c3c50e8db26d49666e351dc", size = 6291380, upload-time = "2025-10-15T16:16:03.938Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a8/566578b10d8d0e9955b1b6cd5db4e9d4592dd0026a941ff7994cedda030a/numpy-2.3.4-cp312-cp312-win_amd64.whl", hash = "sha256:985f1e46358f06c2a09921e8921e2c98168ed4ae12ccd6e5e87a4f1857923f32", size = 12787999, upload-time = "2025-10-15T16:16:05.801Z" }, + { url = "https://files.pythonhosted.org/packages/58/22/9c903a957d0a8071b607f5b1bff0761d6e608b9a965945411f867d515db1/numpy-2.3.4-cp312-cp312-win_arm64.whl", hash = "sha256:4635239814149e06e2cb9db3dd584b2fa64316c96f10656983b8026a82e6e4db", size = 10197412, upload-time = "2025-10-15T16:16:07.854Z" }, + { url = "https://files.pythonhosted.org/packages/57/7e/b72610cc91edf138bc588df5150957a4937221ca6058b825b4725c27be62/numpy-2.3.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c090d4860032b857d94144d1a9976b8e36709e40386db289aaf6672de2a81966", size = 20950335, upload-time = "2025-10-15T16:16:10.304Z" }, + { url = "https://files.pythonhosted.org/packages/3e/46/bdd3370dcea2f95ef14af79dbf81e6927102ddf1cc54adc0024d61252fd9/numpy-2.3.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a13fc473b6db0be619e45f11f9e81260f7302f8d180c49a22b6e6120022596b3", size = 14179878, upload-time = "2025-10-15T16:16:12.595Z" }, + { url = "https://files.pythonhosted.org/packages/ac/01/5a67cb785bda60f45415d09c2bc245433f1c68dd82eef9c9002c508b5a65/numpy-2.3.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:3634093d0b428e6c32c3a69b78e554f0cd20ee420dcad5a9f3b2a63762ce4197", size = 5108673, upload-time = "2025-10-15T16:16:14.877Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cd/8428e23a9fcebd33988f4cb61208fda832800ca03781f471f3727a820704/numpy-2.3.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:043885b4f7e6e232d7df4f51ffdef8c36320ee9d5f227b380ea636722c7ed12e", size = 6641438, upload-time = "2025-10-15T16:16:16.805Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d1/913fe563820f3c6b079f992458f7331278dcd7ba8427e8e745af37ddb44f/numpy-2.3.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ee6a571d1e4f0ea6d5f22d6e5fbd6ed1dc2b18542848e1e7301bd190500c9d7", size = 14281290, upload-time = "2025-10-15T16:16:18.764Z" }, + { url = "https://files.pythonhosted.org/packages/9e/7e/7d306ff7cb143e6d975cfa7eb98a93e73495c4deabb7d1b5ecf09ea0fd69/numpy-2.3.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc8a63918b04b8571789688b2780ab2b4a33ab44bfe8ccea36d3eba51228c953", size = 16636543, upload-time = "2025-10-15T16:16:21.072Z" }, + { url = "https://files.pythonhosted.org/packages/47/6a/8cfc486237e56ccfb0db234945552a557ca266f022d281a2f577b98e955c/numpy-2.3.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:40cc556d5abbc54aabe2b1ae287042d7bdb80c08edede19f0c0afb36ae586f37", size = 16056117, upload-time = "2025-10-15T16:16:23.369Z" }, + { url = "https://files.pythonhosted.org/packages/b1/0e/42cb5e69ea901e06ce24bfcc4b5664a56f950a70efdcf221f30d9615f3f3/numpy-2.3.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ecb63014bb7f4ce653f8be7f1df8cbc6093a5a2811211770f6606cc92b5a78fd", size = 18577788, upload-time = "2025-10-15T16:16:27.496Z" }, + { url = "https://files.pythonhosted.org/packages/86/92/41c3d5157d3177559ef0a35da50f0cda7fa071f4ba2306dd36818591a5bc/numpy-2.3.4-cp313-cp313-win32.whl", hash = "sha256:e8370eb6925bb8c1c4264fec52b0384b44f675f191df91cbe0140ec9f0955646", size = 6282620, upload-time = "2025-10-15T16:16:29.811Z" }, + { url = "https://files.pythonhosted.org/packages/09/97/fd421e8bc50766665ad35536c2bb4ef916533ba1fdd053a62d96cc7c8b95/numpy-2.3.4-cp313-cp313-win_amd64.whl", hash = "sha256:56209416e81a7893036eea03abcb91c130643eb14233b2515c90dcac963fe99d", size = 12784672, upload-time = "2025-10-15T16:16:31.589Z" }, + { url = "https://files.pythonhosted.org/packages/ad/df/5474fb2f74970ca8eb978093969b125a84cc3d30e47f82191f981f13a8a0/numpy-2.3.4-cp313-cp313-win_arm64.whl", hash = "sha256:a700a4031bc0fd6936e78a752eefb79092cecad2599ea9c8039c548bc097f9bc", size = 10196702, upload-time = "2025-10-15T16:16:33.902Z" }, + { url = "https://files.pythonhosted.org/packages/11/83/66ac031464ec1767ea3ed48ce40f615eb441072945e98693bec0bcd056cc/numpy-2.3.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:86966db35c4040fdca64f0816a1c1dd8dbd027d90fca5a57e00e1ca4cd41b879", size = 21049003, upload-time = "2025-10-15T16:16:36.101Z" }, + { url = "https://files.pythonhosted.org/packages/5f/99/5b14e0e686e61371659a1d5bebd04596b1d72227ce36eed121bb0aeab798/numpy-2.3.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:838f045478638b26c375ee96ea89464d38428c69170360b23a1a50fa4baa3562", size = 14302980, upload-time = "2025-10-15T16:16:39.124Z" }, + { url = "https://files.pythonhosted.org/packages/2c/44/e9486649cd087d9fc6920e3fc3ac2aba10838d10804b1e179fb7cbc4e634/numpy-2.3.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d7315ed1dab0286adca467377c8381cd748f3dc92235f22a7dfc42745644a96a", size = 5231472, upload-time = "2025-10-15T16:16:41.168Z" }, + { url = "https://files.pythonhosted.org/packages/3e/51/902b24fa8887e5fe2063fd61b1895a476d0bbf46811ab0c7fdf4bd127345/numpy-2.3.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:84f01a4d18b2cc4ade1814a08e5f3c907b079c847051d720fad15ce37aa930b6", size = 6739342, upload-time = "2025-10-15T16:16:43.777Z" }, + { url = "https://files.pythonhosted.org/packages/34/f1/4de9586d05b1962acdcdb1dc4af6646361a643f8c864cef7c852bf509740/numpy-2.3.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:817e719a868f0dacde4abdfc5c1910b301877970195db9ab6a5e2c4bd5b121f7", size = 14354338, upload-time = "2025-10-15T16:16:46.081Z" }, + { url = "https://files.pythonhosted.org/packages/1f/06/1c16103b425de7969d5a76bdf5ada0804b476fed05d5f9e17b777f1cbefd/numpy-2.3.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85e071da78d92a214212cacea81c6da557cab307f2c34b5f85b628e94803f9c0", size = 16702392, upload-time = "2025-10-15T16:16:48.455Z" }, + { url = "https://files.pythonhosted.org/packages/34/b2/65f4dc1b89b5322093572b6e55161bb42e3e0487067af73627f795cc9d47/numpy-2.3.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2ec646892819370cf3558f518797f16597b4e4669894a2ba712caccc9da53f1f", size = 16134998, upload-time = "2025-10-15T16:16:51.114Z" }, + { url = "https://files.pythonhosted.org/packages/d4/11/94ec578896cdb973aaf56425d6c7f2aff4186a5c00fac15ff2ec46998b46/numpy-2.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:035796aaaddfe2f9664b9a9372f089cfc88bd795a67bd1bfe15e6e770934cf64", size = 18651574, upload-time = "2025-10-15T16:16:53.429Z" }, + { url = "https://files.pythonhosted.org/packages/62/b7/7efa763ab33dbccf56dade36938a77345ce8e8192d6b39e470ca25ff3cd0/numpy-2.3.4-cp313-cp313t-win32.whl", hash = "sha256:fea80f4f4cf83b54c3a051f2f727870ee51e22f0248d3114b8e755d160b38cfb", size = 6413135, upload-time = "2025-10-15T16:16:55.992Z" }, + { url = "https://files.pythonhosted.org/packages/43/70/aba4c38e8400abcc2f345e13d972fb36c26409b3e644366db7649015f291/numpy-2.3.4-cp313-cp313t-win_amd64.whl", hash = "sha256:15eea9f306b98e0be91eb344a94c0e630689ef302e10c2ce5f7e11905c704f9c", size = 12928582, upload-time = "2025-10-15T16:16:57.943Z" }, + { url = "https://files.pythonhosted.org/packages/67/63/871fad5f0073fc00fbbdd7232962ea1ac40eeaae2bba66c76214f7954236/numpy-2.3.4-cp313-cp313t-win_arm64.whl", hash = "sha256:b6c231c9c2fadbae4011ca5e7e83e12dc4a5072f1a1d85a0a7b3ed754d145a40", size = 10266691, upload-time = "2025-10-15T16:17:00.048Z" }, +] + +[[package]] +name = "odfpy" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "defusedxml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/97/73/8ade73f6749177003f7ce3304f524774adda96e6aaab30ea79fd8fda7934/odfpy-1.4.1.tar.gz", hash = "sha256:db766a6e59c5103212f3cc92ec8dd50a0f3a02790233ed0b52148b70d3c438ec", size = 717045, upload-time = "2020-01-18T16:55:48.852Z" } + [[package]] name = "openai" version = "2.6.1" @@ -2564,6 +2666,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/15/0e/331df43df633e6105ff9cf45e0ce57762bd126a45ac16b25a43f6738d8a2/openai-2.6.1-py3-none-any.whl", hash = "sha256:904e4b5254a8416746a2f05649594fa41b19d799843cd134dac86167e094edef", size = 1005551, upload-time = "2025-10-24T13:29:50.973Z" }, ] +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, +] + [[package]] name = "opentelemetry-api" version = "1.38.0" @@ -2642,6 +2756,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, +] + [[package]] name = "pandocfilters" version = "1.5.1" @@ -2767,6 +2915,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload-time = "2018-02-15T19:01:31.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload-time = "2018-02-15T19:01:27.172Z" }, +] + [[package]] name = "polib" version = "1.2.0" @@ -3587,6 +3744,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/53/c59363308ef97507a680372471e25e1ebab2e706a45a7c416eea6474c928/swapper-1.4.0-py2.py3-none-any.whl", hash = "sha256:57b8378aad234242542fe32dc6e8cff0ed24b63493d20b3c88ee01f894b9345e", size = 7106, upload-time = "2024-08-14T19:36:06.247Z" }, ] +[[package]] +name = "tablib" +version = "3.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/00/416d2ba54d7d58a7f7c61bf62dfeb48fd553cf49614daf83312f2d2c156e/tablib-3.9.0.tar.gz", hash = "sha256:1b6abd8edb0f35601e04c6161d79660fdcde4abb4a54f66cc9f9054bd55d5fe2", size = 125565, upload-time = "2025-10-15T18:21:56.263Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/6b/32e51d847148b299088fc42d3d896845fd09c5247190133ea69dbe71ba51/tablib-3.9.0-py3-none-any.whl", hash = "sha256:eda17cd0d4dda614efc0e710227654c60ddbeb1ca92cdcfc5c3bd1fc5f5a6e4a", size = 49580, upload-time = "2025-10-15T18:21:44.185Z" }, +] + +[package.optional-dependencies] +all = [ + { name = "odfpy" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "pyyaml" }, + { name = "tabulate" }, + { name = "xlrd" }, + { name = "xlwt" }, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload-time = "2022-10-06T17:21:48.54Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload-time = "2022-10-06T17:21:44.262Z" }, +] + [[package]] name = "terminado" version = "0.18.1" @@ -3876,6 +4062,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, ] +[[package]] +name = "xlrd" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload-time = "2025-06-14T08:46:39.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload-time = "2025-06-14T08:46:37.766Z" }, +] + +[[package]] +name = "xlwt" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload-time = "2017-08-22T06:47:16.498Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload-time = "2017-08-22T06:47:15.281Z" }, +] + [[package]] name = "yarl" version = "1.22.0" From e9ccbace94924b184ae397ff7de4662f6b4b86b1 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 15 Nov 2025 03:19:15 +0300 Subject: [PATCH 06/18] Features: 1) Add STOREFRONT_DOMAIN to UNFOLD config; 2) Update sidebar to show all applications; 3) Rename Prometheus endpoint to `/prometheus/metrics/`; Fixes: 1) Remove commented-out TABS config; 2) Set collapsible to False for menu; Extra: 1) Add SITE_SYMBOL and SHOW_VIEW_ON_SITE; 2) Update SITE_URL to use STOREFRONT_DOMAIN; 3) Minor config cleanup. --- evibes/settings/drf.py | 2 +- evibes/settings/unfold.py | 21 ++++++--------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/evibes/settings/drf.py b/evibes/settings/drf.py index 42a7f6c5..6b445fb4 100644 --- a/evibes/settings/drf.py +++ b/evibes/settings/drf.py @@ -90,7 +90,7 @@ The API supports multiple response formats: ## Health & Monitoring - Health checks: `/health/` -- Prometheus metrics (basic-auth protected): `/prometheus/` +- Prometheus metrics: `/prometheus/metrics/` ## Version Current API version: {EVIBES_VERSION} diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index 3b8e1610..e2fbd335 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -2,14 +2,17 @@ from django.templatetags.static import static from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ -from evibes.settings.base import PROJECT_NAME, SUPPORT_CONTACT, TASKBOARD_URL +from evibes.settings.base import PROJECT_NAME, STOREFRONT_DOMAIN, SUPPORT_CONTACT, TASKBOARD_URL UNFOLD = { + "SITE_URL": STOREFRONT_DOMAIN, "SITE_TITLE": f"{PROJECT_NAME} Dashboard", "SITE_HEADER": PROJECT_NAME, "SITE_LOGO": "favicon.png", "SITE_ICON": "favicon.ico", + "SITE_SYMBOL": "money", "SHOW_LANGUAGES": True, + "SHOW_VIEW_ON_SITE": False, "LOGIN": { "image": lambda request: static("favicon.png"), }, @@ -53,11 +56,12 @@ UNFOLD = { }, "SIDEBAR": { "show_search": True, + "show_all_applications": True, "navigation": [ { "title": _("Menu"), "separator": True, - "collapsible": True, + "collapsible": False, "items": [ { "title": _("Dashboard"), @@ -98,17 +102,4 @@ UNFOLD = { }, ], }, - # "TABS": [ - # { - # "models": [ - # "core.product", - # ], - # "items": [ - # { - # "title": _("Your custom title"), - # "link": reverse_lazy("admin:core_product_changelist"), - # }, - # ], - # }, - # ], } From 9f46252f481aec84955eb161916596ddb72a0a7d Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 15 Nov 2025 03:57:13 +0300 Subject: [PATCH 07/18] Features: 1) Add new admin menu items for Config, Users, Groups, Products, Categories, Brands, Blogposts, Periodic Tasks, and Sitemap; 2) Integrate Unfold's constance additional fields into CONSTANCE_ADDITIONAL_FIELDS; Fixes: 1) Reorder INSTALLED_APPS to place "constance" after "unfold.contrib.constance"; Extra: 1) Update SVG icon for health check; 2) Add missing import for UNFOLD_CONSTANCE_ADDITIONAL_FIELDS; 3) Fix indentation in constance.py. --- engine/core/static/graphql.svg | 1 + engine/core/static/redoc.svg | 5 ++++ engine/core/static/swagger.svg | 2 ++ evibes/settings/base.py | 2 +- evibes/settings/constance.py | 2 ++ evibes/settings/unfold.py | 45 ++++++++++++++++++++++++++++++++++ 6 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 engine/core/static/graphql.svg create mode 100644 engine/core/static/redoc.svg create mode 100644 engine/core/static/swagger.svg diff --git a/engine/core/static/graphql.svg b/engine/core/static/graphql.svg new file mode 100644 index 00000000..cbf9d25c --- /dev/null +++ b/engine/core/static/graphql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/engine/core/static/redoc.svg b/engine/core/static/redoc.svg new file mode 100644 index 00000000..bc0a2531 --- /dev/null +++ b/engine/core/static/redoc.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/engine/core/static/swagger.svg b/engine/core/static/swagger.svg new file mode 100644 index 00000000..cb06ec4b --- /dev/null +++ b/engine/core/static/swagger.svg @@ -0,0 +1,2 @@ + +file_type_swagger \ No newline at end of file diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 3f0d742a..fbe8be79 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -108,13 +108,13 @@ SITE_ID: int = 1 INSTALLED_APPS: list[str] = [ "django_prometheus", - "constance", "unfold", "unfold.contrib.filters", "unfold.contrib.forms", "unfold.contrib.inlines", "unfold.contrib.constance", "unfold.contrib.import_export", + "constance", "modeltranslation", "django.contrib.admin", "django.contrib.admindocs", diff --git a/evibes/settings/constance.py b/evibes/settings/constance.py index b511e3d7..7634b520 100644 --- a/evibes/settings/constance.py +++ b/evibes/settings/constance.py @@ -2,11 +2,13 @@ from collections import OrderedDict from os import getenv from django.utils.translation import gettext_noop as _ +from unfold.contrib.constance.settings import UNFOLD_CONSTANCE_ADDITIONAL_FIELDS CONSTANCE_BACKEND = "constance.backends.database.DatabaseBackend" CONSTANCE_SUPERUSER_ONLY = False CONSTANCE_ADDITIONAL_FIELDS = { + **UNFOLD_CONSTANCE_ADDITIONAL_FIELDS, "json": [ "django.forms.fields.JSONField", { diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index e2fbd335..9247b627 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -73,6 +73,51 @@ UNFOLD = { "icon": "health_metrics", "link": reverse_lazy("health_check:health_check_home"), }, + { + "title": _("Config"), + "icon": "construction", + "link": reverse_lazy("admin:core_config_changelist"), + }, + { + "title": _("Users"), + "icon": "person", + "link": reverse_lazy("admin:vibes_auth_user_changelist"), + }, + { + "title": _("Groups"), + "icon": "people", + "link": reverse_lazy("admin:vibes_auth_group_changelist"), + }, + { + "title": _("Products"), + "icon": "storefront", + "link": reverse_lazy("admin:core_product_changelist"), + }, + { + "title": _("Categories"), + "icon": "category", + "link": reverse_lazy("admin:core_category_changelist"), + }, + { + "title": _("Brands"), + "icon": "copyright", + "link": reverse_lazy("admin:core_brand_changelist"), + }, + { + "title": _("Blogposts"), + "icon": "newspaper", + "link": reverse_lazy("admin:blog_post_changelist"), + }, + { + "title": _("Periodic Tasks"), + "icon": "event_list", + "link": reverse_lazy("admin:django_celery_beat_periodictask_changelist"), + }, + { + "title": _("Sitemap"), + "icon": "rss_feed", + "link": reverse_lazy("core:sitemap-index"), + }, { "title": _("Swagger"), "icon": "integration_instructions", From 65002671cf01a71983fdaba44257cdb9147c7e29 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 00:32:21 +0300 Subject: [PATCH 08/18] Features: 1) I18N --- .../blog/locale/ar_AR/LC_MESSAGES/django.po | 2 +- .../blog/locale/cs_CZ/LC_MESSAGES/django.po | 2 +- .../blog/locale/da_DK/LC_MESSAGES/django.po | 2 +- .../blog/locale/de_DE/LC_MESSAGES/django.po | 2 +- .../blog/locale/en_GB/LC_MESSAGES/django.po | 2 +- .../blog/locale/en_US/LC_MESSAGES/django.po | 2 +- .../blog/locale/es_ES/LC_MESSAGES/django.po | 2 +- .../blog/locale/fa_IR/LC_MESSAGES/django.po | 2 +- .../blog/locale/fr_FR/LC_MESSAGES/django.po | 2 +- .../blog/locale/he_IL/LC_MESSAGES/django.po | 2 +- .../blog/locale/hi_IN/LC_MESSAGES/django.po | 2 +- .../blog/locale/hr_HR/LC_MESSAGES/django.po | 2 +- .../blog/locale/id_ID/LC_MESSAGES/django.po | 2 +- .../blog/locale/it_IT/LC_MESSAGES/django.po | 2 +- .../blog/locale/ja_JP/LC_MESSAGES/django.po | 2 +- .../blog/locale/kk_KZ/LC_MESSAGES/django.po | 2 +- .../blog/locale/ko_KR/LC_MESSAGES/django.po | 2 +- .../blog/locale/nl_NL/LC_MESSAGES/django.po | 2 +- .../blog/locale/no_NO/LC_MESSAGES/django.po | 2 +- .../blog/locale/pl_PL/LC_MESSAGES/django.po | 2 +- .../blog/locale/pt_BR/LC_MESSAGES/django.po | 2 +- .../blog/locale/ro_RO/LC_MESSAGES/django.po | 2 +- .../blog/locale/ru_RU/LC_MESSAGES/django.po | 2 +- .../blog/locale/sv_SE/LC_MESSAGES/django.po | 2 +- .../blog/locale/th_TH/LC_MESSAGES/django.po | 2 +- .../blog/locale/tr_TR/LC_MESSAGES/django.po | 2 +- .../blog/locale/vi_VN/LC_MESSAGES/django.po | 2 +- .../blog/locale/zh_Hans/LC_MESSAGES/django.po | 2 +- .../core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 105579 -> 105594 bytes .../core/locale/ar_AR/LC_MESSAGES/django.po | 659 ++++++------ .../core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 90352 -> 90369 bytes .../core/locale/cs_CZ/LC_MESSAGES/django.po | 613 ++++++----- .../core/locale/da_DK/LC_MESSAGES/django.mo | Bin 88212 -> 88225 bytes .../core/locale/da_DK/LC_MESSAGES/django.po | 661 ++++++------ .../core/locale/de_DE/LC_MESSAGES/django.mo | Bin 93448 -> 93461 bytes .../core/locale/de_DE/LC_MESSAGES/django.po | 765 +++++++------- .../core/locale/en_GB/LC_MESSAGES/django.mo | Bin 85039 -> 85055 bytes .../core/locale/en_GB/LC_MESSAGES/django.po | 626 ++++++------ .../core/locale/en_US/LC_MESSAGES/django.mo | Bin 85030 -> 85046 bytes .../core/locale/en_US/LC_MESSAGES/django.po | 623 ++++++------ .../core/locale/es_ES/LC_MESSAGES/django.mo | Bin 91410 -> 91426 bytes .../core/locale/es_ES/LC_MESSAGES/django.po | 680 ++++++------- .../core/locale/fa_IR/LC_MESSAGES/django.po | 329 +++--- .../core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 94203 -> 94219 bytes .../core/locale/fr_FR/LC_MESSAGES/django.po | 731 +++++++------ .../core/locale/he_IL/LC_MESSAGES/django.mo | Bin 98244 -> 98260 bytes .../core/locale/he_IL/LC_MESSAGES/django.po | 617 ++++++----- .../core/locale/hi_IN/LC_MESSAGES/django.po | 329 +++--- .../core/locale/hr_HR/LC_MESSAGES/django.po | 329 +++--- .../core/locale/id_ID/LC_MESSAGES/django.mo | Bin 88429 -> 88446 bytes .../core/locale/id_ID/LC_MESSAGES/django.po | 651 ++++++------ .../core/locale/it_IT/LC_MESSAGES/django.mo | Bin 91723 -> 91739 bytes .../core/locale/it_IT/LC_MESSAGES/django.po | 736 +++++++------- .../core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 97034 -> 97023 bytes .../core/locale/ja_JP/LC_MESSAGES/django.po | 937 +++++++---------- .../core/locale/kk_KZ/LC_MESSAGES/django.po | 329 +++--- .../core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 91574 -> 91587 bytes .../core/locale/ko_KR/LC_MESSAGES/django.po | 880 +++++++--------- .../core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 91291 -> 91305 bytes .../core/locale/nl_NL/LC_MESSAGES/django.po | 670 ++++++------ .../core/locale/no_NO/LC_MESSAGES/django.mo | Bin 88863 -> 88879 bytes .../core/locale/no_NO/LC_MESSAGES/django.po | 696 +++++++------ .../core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 90546 -> 90562 bytes .../core/locale/pl_PL/LC_MESSAGES/django.po | 615 ++++++----- .../core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 91151 -> 91167 bytes .../core/locale/pt_BR/LC_MESSAGES/django.po | 673 ++++++------ .../core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 92985 -> 93001 bytes .../core/locale/ro_RO/LC_MESSAGES/django.po | 682 ++++++------- .../core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 120475 -> 120491 bytes .../core/locale/ru_RU/LC_MESSAGES/django.po | 639 ++++++------ .../core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 88902 -> 88911 bytes .../core/locale/sv_SE/LC_MESSAGES/django.po | 663 ++++++------ .../core/locale/th_TH/LC_MESSAGES/django.mo | Bin 143934 -> 143950 bytes .../core/locale/th_TH/LC_MESSAGES/django.po | 958 ++++++++++-------- .../core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 91262 -> 91281 bytes .../core/locale/tr_TR/LC_MESSAGES/django.po | 670 ++++++------ .../core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 102661 -> 102677 bytes .../core/locale/vi_VN/LC_MESSAGES/django.po | 762 +++++++------- .../core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 80053 -> 80069 bytes .../core/locale/zh_Hans/LC_MESSAGES/django.po | 714 ++++++------- .../locale/ar_AR/LC_MESSAGES/django.mo | Bin 5085 -> 7151 bytes .../locale/ar_AR/LC_MESSAGES/django.po | 41 +- .../locale/cs_CZ/LC_MESSAGES/django.mo | Bin 4438 -> 6229 bytes .../locale/cs_CZ/LC_MESSAGES/django.po | 41 +- .../locale/da_DK/LC_MESSAGES/django.mo | Bin 4431 -> 6202 bytes .../locale/da_DK/LC_MESSAGES/django.po | 44 +- .../locale/de_DE/LC_MESSAGES/django.mo | Bin 4604 -> 6446 bytes .../locale/de_DE/LC_MESSAGES/django.po | 49 +- .../locale/en_GB/LC_MESSAGES/django.mo | Bin 4307 -> 6012 bytes .../locale/en_GB/LC_MESSAGES/django.po | 41 +- .../locale/en_US/LC_MESSAGES/django.mo | Bin 4295 -> 6000 bytes .../locale/en_US/LC_MESSAGES/django.po | 41 +- .../locale/es_ES/LC_MESSAGES/django.mo | Bin 4569 -> 6432 bytes .../locale/es_ES/LC_MESSAGES/django.po | 48 +- .../locale/fa_IR/LC_MESSAGES/django.po | 38 +- .../locale/fr_FR/LC_MESSAGES/django.mo | Bin 4658 -> 6518 bytes .../locale/fr_FR/LC_MESSAGES/django.po | 51 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 4811 -> 6630 bytes .../locale/he_IL/LC_MESSAGES/django.po | 47 +- .../locale/hi_IN/LC_MESSAGES/django.po | 38 +- .../locale/hr_HR/LC_MESSAGES/django.po | 38 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 4453 -> 6239 bytes .../locale/id_ID/LC_MESSAGES/django.po | 47 +- .../locale/it_IT/LC_MESSAGES/django.mo | Bin 4567 -> 6363 bytes .../locale/it_IT/LC_MESSAGES/django.po | 48 +- .../locale/ja_JP/LC_MESSAGES/django.mo | Bin 4772 -> 6783 bytes .../locale/ja_JP/LC_MESSAGES/django.po | 49 +- .../locale/kk_KZ/LC_MESSAGES/django.po | 38 +- .../locale/ko_KR/LC_MESSAGES/django.mo | Bin 4576 -> 6441 bytes .../locale/ko_KR/LC_MESSAGES/django.po | 49 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 4458 -> 6241 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 41 +- .../locale/no_NO/LC_MESSAGES/django.mo | Bin 4401 -> 6180 bytes .../locale/no_NO/LC_MESSAGES/django.po | 45 +- .../locale/pl_PL/LC_MESSAGES/django.mo | Bin 4481 -> 6269 bytes .../locale/pl_PL/LC_MESSAGES/django.po | 48 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 4529 -> 6383 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 41 +- .../locale/ro_RO/LC_MESSAGES/django.mo | Bin 4529 -> 6334 bytes .../locale/ro_RO/LC_MESSAGES/django.po | 41 +- .../locale/ru_RU/LC_MESSAGES/django.mo | Bin 5564 -> 8000 bytes .../locale/ru_RU/LC_MESSAGES/django.po | 47 +- .../locale/sv_SE/LC_MESSAGES/django.mo | Bin 4478 -> 6286 bytes .../locale/sv_SE/LC_MESSAGES/django.po | 41 +- .../locale/th_TH/LC_MESSAGES/django.mo | Bin 6612 -> 9379 bytes .../locale/th_TH/LC_MESSAGES/django.po | 53 +- .../locale/tr_TR/LC_MESSAGES/django.mo | Bin 4463 -> 6242 bytes .../locale/tr_TR/LC_MESSAGES/django.po | 44 +- .../locale/vi_VN/LC_MESSAGES/django.mo | Bin 4919 -> 6851 bytes .../locale/vi_VN/LC_MESSAGES/django.po | 51 +- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 4073 -> 5626 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 46 +- .../locale/ar_AR/LC_MESSAGES/django.mo | Bin 17464 -> 17472 bytes .../locale/ar_AR/LC_MESSAGES/django.po | 70 +- .../locale/cs_CZ/LC_MESSAGES/django.mo | Bin 14442 -> 14450 bytes .../locale/cs_CZ/LC_MESSAGES/django.po | 70 +- .../locale/da_DK/LC_MESSAGES/django.mo | Bin 14121 -> 14129 bytes .../locale/da_DK/LC_MESSAGES/django.po | 70 +- .../locale/de_DE/LC_MESSAGES/django.mo | Bin 15193 -> 15201 bytes .../locale/de_DE/LC_MESSAGES/django.po | 70 +- .../locale/en_GB/LC_MESSAGES/django.mo | Bin 13618 -> 13626 bytes .../locale/en_GB/LC_MESSAGES/django.po | 70 +- .../locale/en_US/LC_MESSAGES/django.mo | Bin 13607 -> 13615 bytes .../locale/en_US/LC_MESSAGES/django.po | 70 +- .../locale/es_ES/LC_MESSAGES/django.mo | Bin 14920 -> 14928 bytes .../locale/es_ES/LC_MESSAGES/django.po | 70 +- .../locale/fa_IR/LC_MESSAGES/django.po | 66 +- .../locale/fr_FR/LC_MESSAGES/django.mo | Bin 15640 -> 15648 bytes .../locale/fr_FR/LC_MESSAGES/django.po | 70 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 15674 -> 15682 bytes .../locale/he_IL/LC_MESSAGES/django.po | 70 +- .../locale/hi_IN/LC_MESSAGES/django.po | 66 +- .../locale/hr_HR/LC_MESSAGES/django.po | 66 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 14212 -> 14220 bytes .../locale/id_ID/LC_MESSAGES/django.po | 70 +- .../locale/it_IT/LC_MESSAGES/django.mo | Bin 14879 -> 14887 bytes .../locale/it_IT/LC_MESSAGES/django.po | 70 +- .../locale/ja_JP/LC_MESSAGES/django.mo | Bin 16450 -> 16457 bytes .../locale/ja_JP/LC_MESSAGES/django.po | 70 +- .../locale/kk_KZ/LC_MESSAGES/django.po | 66 +- .../locale/ko_KR/LC_MESSAGES/django.mo | Bin 15039 -> 15047 bytes .../locale/ko_KR/LC_MESSAGES/django.po | 70 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 14536 -> 14544 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 70 +- .../locale/no_NO/LC_MESSAGES/django.mo | Bin 14151 -> 14159 bytes .../locale/no_NO/LC_MESSAGES/django.po | 70 +- .../locale/pl_PL/LC_MESSAGES/django.mo | Bin 14705 -> 14713 bytes .../locale/pl_PL/LC_MESSAGES/django.po | 70 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 14642 -> 14650 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 70 +- .../locale/ro_RO/LC_MESSAGES/django.mo | Bin 15086 -> 15094 bytes .../locale/ro_RO/LC_MESSAGES/django.po | 70 +- .../locale/ru_RU/LC_MESSAGES/django.mo | Bin 19362 -> 19370 bytes .../locale/ru_RU/LC_MESSAGES/django.po | 70 +- .../locale/sv_SE/LC_MESSAGES/django.mo | Bin 14421 -> 14429 bytes .../locale/sv_SE/LC_MESSAGES/django.po | 70 +- .../locale/th_TH/LC_MESSAGES/django.mo | Bin 22332 -> 22340 bytes .../locale/th_TH/LC_MESSAGES/django.po | 70 +- .../locale/tr_TR/LC_MESSAGES/django.mo | Bin 14799 -> 14807 bytes .../locale/tr_TR/LC_MESSAGES/django.po | 70 +- .../locale/vi_VN/LC_MESSAGES/django.mo | Bin 16098 -> 16106 bytes .../locale/vi_VN/LC_MESSAGES/django.po | 70 +- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 13122 -> 13130 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 70 +- evibes/locale/ar_AR/LC_MESSAGES/django.mo | Bin 9442 -> 10055 bytes evibes/locale/ar_AR/LC_MESSAGES/django.po | 218 ++-- evibes/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 8127 -> 8637 bytes evibes/locale/cs_CZ/LC_MESSAGES/django.po | 231 ++--- evibes/locale/da_DK/LC_MESSAGES/django.mo | Bin 7867 -> 8352 bytes evibes/locale/da_DK/LC_MESSAGES/django.po | 227 +++-- evibes/locale/de_DE/LC_MESSAGES/django.mo | Bin 8267 -> 8792 bytes evibes/locale/de_DE/LC_MESSAGES/django.po | 235 ++--- evibes/locale/en_GB/LC_MESSAGES/django.mo | Bin 7752 -> 8213 bytes evibes/locale/en_GB/LC_MESSAGES/django.po | 224 ++-- evibes/locale/en_US/LC_MESSAGES/django.mo | Bin 7756 -> 8217 bytes evibes/locale/en_US/LC_MESSAGES/django.po | 224 ++-- evibes/locale/es_ES/LC_MESSAGES/django.mo | Bin 8327 -> 8814 bytes evibes/locale/es_ES/LC_MESSAGES/django.po | 232 ++--- evibes/locale/fa_IR/LC_MESSAGES/django.po | 112 +- evibes/locale/fr_FR/LC_MESSAGES/django.mo | Bin 8581 -> 9098 bytes evibes/locale/fr_FR/LC_MESSAGES/django.po | 240 ++--- evibes/locale/he_IL/LC_MESSAGES/django.mo | Bin 8850 -> 9442 bytes evibes/locale/he_IL/LC_MESSAGES/django.po | 214 ++-- evibes/locale/hi_IN/LC_MESSAGES/django.po | 112 +- evibes/locale/hr_HR/LC_MESSAGES/django.po | 112 +- evibes/locale/id_ID/LC_MESSAGES/django.mo | Bin 7906 -> 8390 bytes evibes/locale/id_ID/LC_MESSAGES/django.po | 231 ++--- evibes/locale/it_IT/LC_MESSAGES/django.mo | Bin 8259 -> 8758 bytes evibes/locale/it_IT/LC_MESSAGES/django.po | 234 ++--- evibes/locale/ja_JP/LC_MESSAGES/django.mo | Bin 8587 -> 9117 bytes evibes/locale/ja_JP/LC_MESSAGES/django.po | 210 ++-- evibes/locale/kk_KZ/LC_MESSAGES/django.po | 112 +- evibes/locale/ko_KR/LC_MESSAGES/django.mo | Bin 8074 -> 8567 bytes evibes/locale/ko_KR/LC_MESSAGES/django.po | 213 ++-- evibes/locale/nl_NL/LC_MESSAGES/django.mo | Bin 7969 -> 8468 bytes evibes/locale/nl_NL/LC_MESSAGES/django.po | 230 ++--- evibes/locale/no_NO/LC_MESSAGES/django.mo | Bin 7912 -> 8404 bytes evibes/locale/no_NO/LC_MESSAGES/django.po | 227 +++-- evibes/locale/pl_PL/LC_MESSAGES/django.mo | Bin 8216 -> 8699 bytes evibes/locale/pl_PL/LC_MESSAGES/django.po | 228 +++-- evibes/locale/pt_BR/LC_MESSAGES/django.mo | Bin 8275 -> 8788 bytes evibes/locale/pt_BR/LC_MESSAGES/django.po | 235 ++--- evibes/locale/ro_RO/LC_MESSAGES/django.mo | Bin 8320 -> 8833 bytes evibes/locale/ro_RO/LC_MESSAGES/django.po | 235 ++--- evibes/locale/ru_RU/LC_MESSAGES/django.mo | Bin 10515 -> 11201 bytes evibes/locale/ru_RU/LC_MESSAGES/django.po | 231 ++--- evibes/locale/sv_SE/LC_MESSAGES/django.mo | Bin 8002 -> 8488 bytes evibes/locale/sv_SE/LC_MESSAGES/django.po | 233 ++--- evibes/locale/th_TH/LC_MESSAGES/django.mo | Bin 12193 -> 12914 bytes evibes/locale/th_TH/LC_MESSAGES/django.po | 223 ++-- evibes/locale/tr_TR/LC_MESSAGES/django.mo | Bin 8295 -> 8818 bytes evibes/locale/tr_TR/LC_MESSAGES/django.po | 239 ++--- evibes/locale/vi_VN/LC_MESSAGES/django.mo | Bin 8772 -> 9352 bytes evibes/locale/vi_VN/LC_MESSAGES/django.po | 229 ++--- evibes/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 7489 -> 7948 bytes evibes/locale/zh_Hans/LC_MESSAGES/django.po | 189 ++-- evibes/settings/emailing.py | 15 +- evibes/settings/unfold.py | 8 +- 238 files changed, 14016 insertions(+), 13370 deletions(-) diff --git a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po index 8bb80d11..f4d65ae0 100644 --- a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po index 6b1870e6..95ffc073 100644 --- a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/da_DK/LC_MESSAGES/django.po b/engine/blog/locale/da_DK/LC_MESSAGES/django.po index 86cb231f..c5e9efc9 100644 --- a/engine/blog/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/blog/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/de_DE/LC_MESSAGES/django.po b/engine/blog/locale/de_DE/LC_MESSAGES/django.po index 08f3fd24..82ed0ede 100644 --- a/engine/blog/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/blog/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/en_GB/LC_MESSAGES/django.po b/engine/blog/locale/en_GB/LC_MESSAGES/django.po index 7002fc48..8e7bc7b2 100644 --- a/engine/blog/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/blog/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/en_US/LC_MESSAGES/django.po b/engine/blog/locale/en_US/LC_MESSAGES/django.po index 3e38ea35..1fed25ce 100644 --- a/engine/blog/locale/en_US/LC_MESSAGES/django.po +++ b/engine/blog/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/es_ES/LC_MESSAGES/django.po b/engine/blog/locale/es_ES/LC_MESSAGES/django.po index 086508a3..0c45e72e 100644 --- a/engine/blog/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/blog/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po index 94171191..45be4ead 100644 --- a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po index bdd41140..6c238324 100644 --- a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/he_IL/LC_MESSAGES/django.po b/engine/blog/locale/he_IL/LC_MESSAGES/django.po index dce59038..5228051c 100644 --- a/engine/blog/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/blog/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po index fe271605..a64cad3e 100644 --- a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po index 94171191..45be4ead 100644 --- a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/id_ID/LC_MESSAGES/django.po b/engine/blog/locale/id_ID/LC_MESSAGES/django.po index 4c8ee1fd..6ebddfa3 100644 --- a/engine/blog/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/blog/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/it_IT/LC_MESSAGES/django.po b/engine/blog/locale/it_IT/LC_MESSAGES/django.po index 7c7cd5e9..9857fb3c 100644 --- a/engine/blog/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/blog/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po index f318b58d..4fbf85f6 100644 --- a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po index fe271605..a64cad3e 100644 --- a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po index b7e3ef96..be11eaae 100644 --- a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po index babae3e5..cbffe107 100644 --- a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/no_NO/LC_MESSAGES/django.po b/engine/blog/locale/no_NO/LC_MESSAGES/django.po index 8cf9d5c7..cefd52b4 100644 --- a/engine/blog/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/blog/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po index bee73321..118f51aa 100644 --- a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po index 53c73560..eb54d774 100644 --- a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po index 20171916..5e23936e 100644 --- a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po index b1e00270..f5b95f91 100644 --- a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po index 9ff9eefc..08867e69 100644 --- a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/th_TH/LC_MESSAGES/django.po b/engine/blog/locale/th_TH/LC_MESSAGES/django.po index b449e6f1..500fd5a7 100644 --- a/engine/blog/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/blog/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po index 01057517..576e79fd 100644 --- a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po index ef672308..2d3210da 100644 --- a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po index d97cc130..1d282a20 100644 --- a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.mo b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo index 2a03c4a806fd63d9029488cacccb47b713cb6d5c..544a862fed5e15d7126f90ddca5f86bd45d454a2 100644 GIT binary patch delta 5477 zcmYk=eSFX59>?+P8WzJMG1S0c{;7D30okh;;{ky)Wj(?ul=lWjX>;AgFzqztEuxfAMo|_GP zQO20=WyXZ!M2yBI*bYlE63=5>4BBtZ1Zzwe3?nZ7z?dJ1-@`kJU;BsieXK)VjxF&d zw!z=9IYt~XCKi(q7@uiPVm=x2MSK+xqAHm4q3hTZR7YRH>sXG#SoV=?umTU$k+YaY z{?3n$8G+YP14{YCn9sU`&6!Lc?2+Gc)9`_>9@ZYnV^|tj~?9jX#_)W;)*d!kEE4&pm0(UVP6- zLR0_vDOYhJ#t|RG)>!+rF@e|#>tY<*j@SZu-zTQQAz@7KokA`bkT@abh^P7yD?YRr&o#*DjWOhe21m;OkPDDX+8G4E60%)eO@ zEWW`$z!v{u?W-GewTc;`T;tnRg1xOZ%(D5gnl%L~U)`E7$qx;*raSpJY7&zlQ_Gs? zu`cTn!Smg9ta+afoCxN<0M>uQUDj;mK?vOm<-wj1Dj=?CYRv!)3biJS3NxBp6N7JJ z3Vw$P7!zhq2+l$+)iXE%3sFmQ1~s!W;nqJhy*vlvLfSVYNND6IP!(-xX$=E5uVEOz zf!eLd@dOXa=lv+=;!SLYlkaz~#zDkyp{BZewDs@)1XQ_~JrCid#Mkj2%xrJ{n|2aNB3+|<;KbvAw*HH&5jH1I#LhSlwPZy;5{V>Ed4_gzBg#UZ|4pchK0qy11*)PNUEOAEg(~;3 z=OWZdw_`Y-Lv_%0v;M2NAu5jZ^rew_fQ)h24!5B?blfY@FwS)#5;YTDP&1Q`8tEuh zg;P--E%5SJp_aA;wW;4m-76KSi>pq&U!S>$ger_e73}ODm^4(yqw!wM!@KZVRQVFr zn(st)qyp8!^VkflPy=bgEu?xzVHi$FJzwLO^S9f}s6aJz74MFwKi2a25Tj_ z`(P5Pf$f-z@1V+8Pjn47MlD?w>is?#jzds;U?wKva@5itLCw_3M9zO2iKczr+D^hK z;(T0>+fWxw_rBKu)tiI5VmG5k@FHqYl%vl3c`vT@fID9IVlVQ?;xG7TREIVuS^tvm zO7dAVm5d`~sAoO<>665F9arGTI01(xyAkij4C2G6io^T6yM8R{D&B$GBY^|lebUM^ z5hKXYM9s`n^dD0n2{m*M7vYo?Yv$k;)NvX=(5-nMK1^JQ8o^amhpVN!3WISRaR=;% z>rhK}2(>h)uq9TaHf2bf+oZlc68c(|qVDcnsFAcBl$$u=W4M z8jL%L7ozq+WV-eLvg(G~lw}x$$Go`45dSyEXF^B};z3{3O|}kI@jmQ~l^BhYLtRHl zpng2Q;CaHc&M<3+k)McqZv$%Y974^=9U0dDQ!c^tX^hokA0?pzHHN!}dZBjfRMZlb zVifMj`|%1k$0iTDI1U#R=b%o-Wz-D(hWd)ueaJ0U95yC?098*WHq~ZZNkY4M8)`Qn zMcrf z{4)~T&A+0iEPj;hz-&~(HK-YQ$@2(msj5&T4Ik}(Xmr4V#EVen592*}1GS_LGTpID zL*-A)9Z8JAm4h-=ap+ag5u1Jx~p2;AG6l!T2?54|UFRr(_8ZAwG-R zI~~SalZ{!Znf(y8H0Q>0{?$P3aqfpfBh-{fphg~xn!5g8JO*{8KIX-%z2`5YPRBma zW2lBMq3Wsjh^s#YHPANL4%2-k)RP4`6kkC#coQ{6ca3)=jz(>|;n)KoM{S}vP*Z*0 zdtQ5jTavb@dg49PQSVPgot|Z=rT6`nL~jybp?;BsXS)a4s0(8yuEpKh851YE=W|dq zwFSd)2WpKEp)R5tIo2=+lY^s)4^FcFKfNL*yAEzf2H-P0N$5Acy0~?ko8>&vx_Nlx{+G>=vs0@F%Rv!NaJ(repK1 znTuOc$FI?RwrKmOQ$uWHb_n{hyU1UuJGfo1<>fHmC-3Q1`?FFW!Wze-DOZ1$M+Ad?d7{Eta}Fd>+1}0;r{# zxy)_OGuVeX@+tQj&BbBFC76Uip*j%%v>U)Yj3?fOdVUGD`PwhHrajI;#lGiB=mNUv zW!$;Kt@RMpRF|QSPsB>s(G^%g{1s|MsI@(f4e*i|-@-`Zpmp9i0b3FG$1t3R5x5$=<2$JPq7v(2 z*FyJKbbr*x>MhjT*I3Uf(fRL6LNic;E%05`TAo4m{N4?2YI|TR@d)gPFQaDWU#L?w z=}#{I80tc6T;%r51RP1c9miw9Mt9Fl#O!i1wvb51N1t?aNWWsBWQVqDyI9n;2^s6i$uQf2ck=A)$Fe7wKi>FzSiHvV5T(dk16rzG{w$QqQGmb4&jeo?`A8(MU`*arU>6JS;G delta 5449 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -27,7 +27,8 @@ msgstr "نشط" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "إذا تم تعيينه على خطأ، لا يمكن للمستخدمين رؤية هذا الكائن دون الحاجة إلى إذن" @@ -47,89 +48,89 @@ msgstr "تم التعديل" msgid "when the object was last modified" msgstr "متى تم تحرير الكائن آخر مرة" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "الترجمات" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "جنرال لواء" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "العلاقات" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "معلومات إضافية" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "البيانات الوصفية" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "الطوابع الزمنية" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "تنشيط المحدد _PH_0__%(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "تم تفعيل العناصر المختارة!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "إلغاء التنشيط المحدد _PH_0_%(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "تم إلغاء تنشيط العناصر المحددة!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "قيمة السمة" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "قيم السمات" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "الصورة" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "الصور" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "المخزون" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "الأسهم" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "طلب المنتج" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "اطلب المنتجات" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "الأطفال" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "التكوين" @@ -153,7 +154,8 @@ msgstr "تم التسليم" msgid "canceled" msgstr "تم الإلغاء" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "فشل" @@ -191,11 +193,11 @@ msgid "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." msgstr "" -"مخطط OpenApi3 لواجهة برمجة التطبيقات هذه. يمكن تحديد التنسيق عبر التفاوض على " -"المحتوى. يمكن تحديد اللغة باستخدام معلمة قبول اللغة ومعلمة الاستعلام على حد " -"سواء." +"مخطط OpenApi3 لواجهة برمجة التطبيقات هذه. يمكن تحديد التنسيق عبر التفاوض على" +" المحتوى. يمكن تحديد اللغة باستخدام معلمة قبول اللغة ومعلمة الاستعلام على حد" +" سواء." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "ذاكرة التخزين المؤقت للإدخال/الإخراج" @@ -205,8 +207,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "تطبيق مفتاح فقط لقراءة البيانات المسموح بها من ذاكرة التخزين المؤقت.\n" -"تطبيق مفتاح وبيانات ومهلة مع المصادقة لكتابة البيانات إلى ذاكرة التخزين " -"المؤقت." +"تطبيق مفتاح وبيانات ومهلة مع المصادقة لكتابة البيانات إلى ذاكرة التخزين المؤقت." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -220,7 +221,7 @@ msgstr "الحصول على معلمات التطبيق القابلة للكش msgid "send a message to the support team" msgstr "إرسال رسالة إلى فريق الدعم" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "طلب عنوان URL مرتبط بـ CORSed. مسموح بـ https فقط." @@ -269,7 +270,8 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "إعادة كتابة مجموعة سمات موجودة تحفظ غير القابلة للتعديل" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "إعادة كتابة بعض حقول مجموعة سمات موجودة تحفظ غير القابلة للتعديل" #: engine/core/docs/drf/viewsets.py:106 @@ -317,7 +319,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "إعادة كتابة قيمة سمة موجودة تحفظ غير القابلة للتعديل" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "إعادة كتابة بعض حقول قيمة سمة موجودة حفظ غير قابل للتعديل" #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 @@ -350,9 +353,9 @@ msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "لقطة تعريفية لتحسين محركات البحث SEO" @@ -370,8 +373,8 @@ msgstr "بالنسبة للمستخدمين من غير الموظفين، يت #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "البحث في سلسلة فرعية غير حساسة لحالة الأحرف عبر human_readable_id و " "order_products.product.name و order_products.product.partnumber" @@ -407,9 +410,9 @@ msgstr "تصفية حسب حالة الطلب (مطابقة سلسلة فرعي #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "الترتيب حسب واحد من: uuid، معرف_بشري_مقروء، بريد_إلكتروني_مستخدم، مستخدم، " "حالة، إنشاء، تعديل، وقت_الشراء، عشوائي. البادئة بحرف \"-\" للترتيب التنازلي " @@ -464,7 +467,7 @@ msgstr "استرداد الطلب المعلق الحالي للمستخدم" msgid "retrieves a current pending order of an authenticated user" msgstr "استرداد الطلب الحالي المعلق لمستخدم مصادق عليه" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "شراء طلب شراء بدون إنشاء حساب" @@ -491,7 +494,8 @@ msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -"يضيف قائمة من المنتجات إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." +"يضيف قائمة من المنتجات إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" " +"المتوفرة." #: engine/core/docs/drf/viewsets.py:438 msgid "remove product from order" @@ -501,8 +505,7 @@ msgstr "إزالة منتج من الطلب" msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." -msgstr "" -"يزيل منتجًا من أحد الطلبات باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." +msgstr "يزيل منتجًا من أحد الطلبات باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." #: engine/core/docs/drf/viewsets.py:447 msgid "remove product from order, quantities will not count" @@ -596,32 +599,20 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "تصفية حسب زوج واحد أو أكثر من أسماء/قيم السمات. \n" "- **صيغة**: `attr_name=الطريقة-القيمة[ ؛ attr2=الطريقة2-القيمة2]...`\n" -"- **الأساليب** (افتراضيًا إلى \"يحتوي على\" إذا تم حذفها): \"بالضبط\"، " -"\"بالضبط\"، \"بالضبط\"، \"يحتوي\"، \"يحتوي\"، \"لاغية\"، \"يبدأ ب\"، \"يبدأ " -"ب\"، \"يبدأ ب\"، \"ينتهي ب\"، \"ينتهي ب\"، \"regex\"، \"iregex\"، \"lt\"، " -"\"lte\"، \"gt\"، \"gte\"، \"in\n" -"- **كتابة القيمة**: تتم تجربة JSON أولًا (حتى تتمكن من تمرير القوائم/" -"المجادلات)، \"صحيح\"/\"خطأ\" للمنطقيين والأعداد الصحيحة والعوامات؛ وإلا يتم " -"التعامل معها كسلسلة. \n" -"- **القاعدة 64**: البادئة ب \"b64-\" لتشفير القيمة الخام بأمان لقاعدة 64- " -"لتشفير القيمة الخام. \n" +"- **الأساليب** (افتراضيًا إلى \"يحتوي على\" إذا تم حذفها): \"بالضبط\"، \"بالضبط\"، \"بالضبط\"، \"يحتوي\"، \"يحتوي\"، \"لاغية\"، \"يبدأ ب\"، \"يبدأ ب\"، \"يبدأ ب\"، \"ينتهي ب\"، \"ينتهي ب\"، \"regex\"، \"iregex\"، \"lt\"، \"lte\"، \"gt\"، \"gte\"، \"in\n" +"- **كتابة القيمة**: تتم تجربة JSON أولًا (حتى تتمكن من تمرير القوائم/المجادلات)، \"صحيح\"/\"خطأ\" للمنطقيين والأعداد الصحيحة والعوامات؛ وإلا يتم التعامل معها كسلسلة. \n" +"- **القاعدة 64**: البادئة ب \"b64-\" لتشفير القيمة الخام بأمان لقاعدة 64- لتشفير القيمة الخام. \n" "أمثلة: \n" -"'color=exact-red'، 'size=gt-10'، 'features=in-[\"wifi\"،\"bluetooth\"]، " -"'fatures=in-[\"wifi\",\"bluetooth\"],\n" +"'color=exact-red'، 'size=gt-10'، 'features=in-[\"wifi\"،\"bluetooth\"]، 'fatures=in-[\"wifi\",\"bluetooth\"],\n" "\"b64-description=icontains-aGVhdC1jb2xk" #: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 @@ -634,8 +625,7 @@ msgstr "(بالضبط) UUID المنتج" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" "قائمة مفصولة بفواصل من الحقول للفرز حسب. البادئة بـ \"-\" للفرز التنازلي. \n" @@ -652,6 +642,9 @@ msgid "Product UUID or slug" msgstr "معرف المنتج UUID أو سبيكة المنتج" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "إنشاء منتج" @@ -1070,246 +1063,247 @@ msgstr "المستوى" msgid "Product UUID" msgstr "UUID المنتج" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "" "مفتاح للبحث عنه في ذاكرة التخزين المؤقت أو تعيينه في ذاكرة التخزين المؤقت" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "البيانات المراد تخزينها في ذاكرة التخزين المؤقت" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "المهلة بالثواني لتعيين البيانات في ذاكرة التخزين المؤقت" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "البيانات المخزنة مؤقتاً" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "إضافة منتج إلى الطلب" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "الطلب {order_uuid} غير موجود!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "إزالة جميع المنتجات من الطلب" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "شراء طلبية" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "تنفيذ إجراء على قائمة من المنتجات بالترتيب" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "إزالة/إضافة" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "تنفيذ إجراء على قائمة المنتجات في قائمة الأمنيات" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "يُرجى تقديم قيمة \"wishlist_uid\"." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "قائمة الرغبات {wishlist_uuid} غير موجودة!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "إضافة منتج إلى الطلب" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "شراء طلبية" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr1=قيمة1، attr2=قيمة2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "إضافة أو حذف تعليق على طلبالمنتج" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "طلب المنتج {order_product_uuid} غير موجود!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "يجب أن يكون الحد بين 1 و10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - يعمل مثل السحر" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "السمات" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "السمات المجمعة" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "مجموعات السمات" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "الفئات" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "العلامات التجارية" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "الفئات" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "النسبة المئوية للترميز" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "ما هي السمات والقيم التي يمكن استخدامها لتصفية هذه الفئة." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "الحد الأدنى والحد الأقصى لأسعار المنتجات في هذه الفئة، إذا كانت متوفرة." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "العلامات الخاصة بهذه الفئة" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "المنتجات في هذه الفئة" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "البائعون" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "خط العرض (الإحداثي Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "خط الطول (الإحداثي X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "كيفية" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "قيمة التصنيف من 1 إلى 10، شاملة، أو 0 إذا لم يتم تعيينها." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "الإشعارات" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "الملاحظات" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "عنوان إرسال الفواتير" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1317,53 +1311,53 @@ msgstr "" "عنوان الشحن لهذا الطلب، اترك العنوان فارغًا إذا كان هو نفسه عنوان إرسال " "الفواتير أو إذا لم يكن منطبقًا" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "السعر الإجمالي لهذا الطلب" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "إجمالي كمية المنتجات بالترتيب" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "هل جميع المنتجات في الطلب رقمي" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "المعاملات الخاصة بهذا الطلب" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "الطلبات" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "رابط الصورة" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "صور المنتج" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "الفئة" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "الملاحظات" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "العلامة التجارية" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "مجموعات السمات" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1371,7 +1365,7 @@ msgstr "مجموعات السمات" msgid "price" msgstr "السعر" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1379,39 +1373,39 @@ msgstr "السعر" msgid "quantity" msgstr "الكمية" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "عدد الملاحظات" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "المنتجات متاحة للطلبات الشخصية فقط" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "سعر الخصم" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "المنتجات" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "الرموز الترويجية" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "العروض الترويجية" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "البائع" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1419,100 +1413,100 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "قوائم التمنيات" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "المنتجات الموسومة" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "علامات المنتج" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "الفئات الموسومة" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "علامات الفئات" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "اسم المشروع" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "اسم الشركة" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "عنوان الشركة" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "رقم هاتف الشركة" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -"\"البريد الإلكتروني من\"، في بعض الأحيان يجب استخدامه بدلاً من قيمة المستخدم " -"المضيف" +"\"البريد الإلكتروني من\"، في بعض الأحيان يجب استخدامه بدلاً من قيمة المستخدم" +" المضيف" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "مستخدم البريد الإلكتروني المضيف" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "الحد الأقصى لمبلغ السداد" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "الحد الأدنى لمبلغ السداد" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "بيانات التحليلات" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "بيانات الإعلانات" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "التكوين" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "رمز اللغة" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "اسم اللغة" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "علم اللغة، إذا كان موجوداً :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "الحصول على قائمة باللغات المدعومة" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "نتائج البحث عن المنتجات" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "نتائج البحث عن المنتجات" @@ -1558,8 +1552,8 @@ msgstr "" "تفاعلهم. يتم استخدام فئة البائع لتعريف وإدارة المعلومات المتعلقة ببائع " "خارجي. وهو يخزن اسم البائع، وتفاصيل المصادقة المطلوبة للاتصال، والنسبة " "المئوية للترميز المطبقة على المنتجات المسترجعة من البائع. يحتفظ هذا النموذج " -"أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة التي " -"تتفاعل مع البائعين الخارجيين." +"أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة " +"التي تتفاعل مع البائعين الخارجيين." #: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" @@ -1612,9 +1606,9 @@ msgid "" "metadata customization for administrative purposes." msgstr "" "يمثل علامة منتج تُستخدم لتصنيف المنتجات أو تعريفها. صُممت فئة ProductTag " -"لتعريف المنتجات وتصنيفها بشكل فريد من خلال مزيج من معرّف علامة داخلي واسم عرض " -"سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر تخصيص " -"البيانات الوصفية لأغراض إدارية." +"لتعريف المنتجات وتصنيفها بشكل فريد من خلال مزيج من معرّف علامة داخلي واسم " +"عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر " +"تخصيص البيانات الوصفية لأغراض إدارية." #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1642,8 +1636,8 @@ msgid "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -"يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط " -"المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." +"يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط" +" المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." #: engine/core/models.py:254 msgid "category tag" @@ -1669,9 +1663,9 @@ msgstr "" "علاقات هرمية مع فئات أخرى، مما يدعم العلاقات بين الأصل والطفل. تتضمن الفئة " "حقول للبيانات الوصفية والتمثيل المرئي، والتي تعمل كأساس للميزات المتعلقة " "بالفئات. تُستخدم هذه الفئة عادةً لتعريف وإدارة فئات المنتجات أو غيرها من " -"التجميعات المماثلة داخل التطبيق، مما يسمح للمستخدمين أو المسؤولين بتحديد اسم " -"الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو العلامات " -"أو الأولوية." +"التجميعات المماثلة داخل التطبيق، مما يسمح للمستخدمين أو المسؤولين بتحديد اسم" +" الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو " +"العلامات أو الأولوية." #: engine/core/models.py:274 msgid "upload an image representing this category" @@ -1722,7 +1716,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "يمثل كائن العلامة التجارية في النظام. تتعامل هذه الفئة مع المعلومات والسمات " "المتعلقة بالعلامة التجارية، بما في ذلك اسمها وشعاراتها ووصفها والفئات " @@ -1771,8 +1766,8 @@ msgstr "الفئات" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1862,10 +1857,10 @@ msgid "" msgstr "" "يمثل منتجًا بخصائص مثل الفئة والعلامة التجارية والعلامات والحالة الرقمية " "والاسم والوصف ورقم الجزء والعلامة التجارية والحالة الرقمية والاسم والوصف " -"ورقم الجزء والسبيكة. يوفر خصائص الأداة المساعدة ذات الصلة لاسترداد التقييمات " -"وعدد الملاحظات والسعر والكمية وإجمالي الطلبات. مصمم للاستخدام في نظام يتعامل " -"مع التجارة الإلكترونية أو إدارة المخزون. تتفاعل هذه الفئة مع النماذج ذات " -"الصلة (مثل الفئة والعلامة التجارية وعلامة المنتج) وتدير التخزين المؤقت " +"ورقم الجزء والسبيكة. يوفر خصائص الأداة المساعدة ذات الصلة لاسترداد التقييمات" +" وعدد الملاحظات والسعر والكمية وإجمالي الطلبات. مصمم للاستخدام في نظام " +"يتعامل مع التجارة الإلكترونية أو إدارة المخزون. تتفاعل هذه الفئة مع النماذج " +"ذات الصلة (مثل الفئة والعلامة التجارية وعلامة المنتج) وتدير التخزين المؤقت " "للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " "ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." @@ -1922,8 +1917,8 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "يمثل سمة في النظام. تُستخدم هذه الفئة لتعريف السمات وإدارتها، وهي عبارة عن " @@ -1991,9 +1986,9 @@ msgstr "السمة" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "يمثل قيمة محددة لسمة مرتبطة بمنتج ما. يربط \"السمة\" بـ \"قيمة\" فريدة، مما " "يسمح بتنظيم أفضل وتمثيل ديناميكي لخصائص المنتج." @@ -2013,8 +2008,8 @@ msgstr "القيمة المحددة لهذه السمة" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2060,13 +2055,14 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"يمثل حملة ترويجية للمنتجات ذات الخصم. تُستخدم هذه الفئة لتعريف وإدارة الحملات " -"الترويجية التي تقدم خصمًا على أساس النسبة المئوية للمنتجات. تتضمن الفئة سمات " -"لتعيين معدل الخصم وتوفير تفاصيل حول العرض الترويجي وربطه بالمنتجات القابلة " -"للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة في الحملة." +"يمثل حملة ترويجية للمنتجات ذات الخصم. تُستخدم هذه الفئة لتعريف وإدارة " +"الحملات الترويجية التي تقدم خصمًا على أساس النسبة المئوية للمنتجات. تتضمن " +"الفئة سمات لتعيين معدل الخصم وتوفير تفاصيل حول العرض الترويجي وربطه " +"بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" +" في الحملة." #: engine/core/models.py:880 msgid "percentage discount for the selected products" @@ -2107,8 +2103,8 @@ msgid "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." msgstr "" -"يمثل قائمة أمنيات المستخدم لتخزين وإدارة المنتجات المطلوبة. توفر الفئة وظائف " -"لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " +"يمثل قائمة أمنيات المستخدم لتخزين وإدارة المنتجات المطلوبة. توفر الفئة وظائف" +" لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " "بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." #: engine/core/models.py:926 @@ -2133,11 +2129,11 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"يمثل سجل وثائقي مرتبط بمنتج ما. تُستخدم هذه الفئة لتخزين معلومات حول الأفلام " -"الوثائقية المرتبطة بمنتجات محددة، بما في ذلك تحميلات الملفات وبياناتها " +"يمثل سجل وثائقي مرتبط بمنتج ما. تُستخدم هذه الفئة لتخزين معلومات حول الأفلام" +" الوثائقية المرتبطة بمنتجات محددة، بما في ذلك تحميلات الملفات وبياناتها " "الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " "الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." @@ -2155,19 +2151,19 @@ msgstr "لم يتم حلها" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "يمثل كيان عنوان يتضمن تفاصيل الموقع والارتباطات مع المستخدم. يوفر وظائف " "لتخزين البيانات الجغرافية وبيانات العنوان، بالإضافة إلى التكامل مع خدمات " -"الترميز الجغرافي. صُممت هذه الفئة لتخزين معلومات العنوان التفصيلية بما في ذلك " -"مكونات مثل الشارع والمدينة والمنطقة والبلد والموقع الجغرافي (خطوط الطول " +"الترميز الجغرافي. صُممت هذه الفئة لتخزين معلومات العنوان التفصيلية بما في " +"ذلك مكونات مثل الشارع والمدينة والمنطقة والبلد والموقع الجغرافي (خطوط الطول " "والعرض). وهو يدعم التكامل مع واجهات برمجة التطبيقات للترميز الجغرافي، مما " "يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " "تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." @@ -2233,9 +2229,9 @@ msgid "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." msgstr "" -"يمثل الرمز الترويجي الذي يمكن استخدامه للحصول على خصومات وإدارة صلاحيته ونوع " -"الخصم والتطبيق. تقوم فئة PromoCode بتخزين تفاصيل حول الرمز الترويجي، بما في " -"ذلك معرفه الفريد، وخصائص الخصم (المبلغ أو النسبة المئوية)، وفترة الصلاحية، " +"يمثل الرمز الترويجي الذي يمكن استخدامه للحصول على خصومات وإدارة صلاحيته ونوع" +" الخصم والتطبيق. تقوم فئة PromoCode بتخزين تفاصيل حول الرمز الترويجي، بما في" +" ذلك معرفه الفريد، وخصائص الخصم (المبلغ أو النسبة المئوية)، وفترة الصلاحية، " "والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " "الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." @@ -2281,7 +2277,8 @@ msgstr "وقت بدء الصلاحية" #: engine/core/models.py:1120 msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" +msgstr "" +"الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" #: engine/core/models.py:1121 msgid "usage timestamp" @@ -2308,8 +2305,8 @@ msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -"يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين " -"أو لا هذا ولا ذاك." +"يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" +" أو لا هذا ولا ذاك." #: engine/core/models.py:1171 msgid "promocode already used" @@ -2324,8 +2321,8 @@ msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2468,8 +2465,8 @@ msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -"لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد " -"الإلكتروني للعميل، رقم هاتف العميل" +"لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" +" الإلكتروني للعميل، رقم هاتف العميل" #: engine/core/models.py:1584 #, python-brace-format @@ -2500,7 +2497,8 @@ msgid "feedback comments" msgstr "تعليقات على الملاحظات" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" #: engine/core/models.py:1720 @@ -2530,9 +2528,9 @@ msgstr "" "يمثل المنتجات المرتبطة بالطلبات وسماتها. يحتفظ نموذج OrderProduct بمعلومات " "حول المنتج الذي هو جزء من الطلب، بما في ذلك تفاصيل مثل سعر الشراء والكمية " "وسمات المنتج وحالته. يدير الإشعارات للمستخدم والمسؤولين ويتعامل مع عمليات " -"مثل إرجاع رصيد المنتج أو إضافة ملاحظات. يوفر هذا النموذج أيضًا أساليب وخصائص " -"تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل للمنتجات " -"الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." +"مثل إرجاع رصيد المنتج أو إضافة ملاحظات. يوفر هذا النموذج أيضًا أساليب وخصائص" +" تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " +"للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." #: engine/core/models.py:1757 msgid "the price paid by the customer for this product at purchase time" @@ -2640,15 +2638,15 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "يمثل وظيفة التنزيل للأصول الرقمية المرتبطة بالطلبات. توفر فئة " "DigitalAssetDownload القدرة على إدارة التنزيلات المتعلقة بمنتجات الطلبات " "والوصول إليها. وتحتفظ بمعلومات حول منتج الطلب المرتبط، وعدد التنزيلات، وما " -"إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل عندما " -"يكون الطلب المرتبط في حالة مكتملة." +"إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " +"عندما يكون الطلب المرتبط في حالة مكتملة." #: engine/core/models.py:1961 msgid "download" @@ -2704,12 +2702,11 @@ msgstr "مرحباً %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" -"شكرًا لك على طلبك #%(order.pk)s! يسعدنا إبلاغك بأننا قد أخذنا طلبك في العمل. " -"فيما يلي تفاصيل طلبك:" +"شكرًا لك على طلبك #%(order.pk)s! يسعدنا إبلاغك بأننا قد أخذنا طلبك في العمل." +" فيما يلي تفاصيل طلبك:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2816,8 +2813,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "شكرًا لك على طلبك! يسعدنا تأكيد طلبك. فيما يلي تفاصيل طلبك:" @@ -2856,23 +2852,23 @@ msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | بادر بالاتصال بنا" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | بادر بالاتصال بنا" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | تأكيد الطلب" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | تأكيد الطلب" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | طلبية تم تسليمها" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | طلبية تم تسليمها" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | الرمز الترويجي الممنوح" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} |الرمز الترويجي الممنوح" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2944,14 +2940,10 @@ msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تس #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" -"تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص " -"بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن " -"المورد غير متوفر." +"تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -2980,30 +2972,26 @@ msgstr "الرمز المفضل غير موجود" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" -"تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. " -"إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى " -"أن المورد غير متوفر." +"تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"يعيد توجيه الطلب إلى صفحة فهرس المشرف. تعالج الدالة طلبات HTTP الواردة وتعيد " -"توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " +"يعيد توجيه الطلب إلى صفحة فهرس المشرف. تعالج الدالة طلبات HTTP الواردة وتعيد" +" توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " "Django للتعامل مع إعادة توجيه HTTP." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "إرجاع الإصدار الحالي من eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3011,24 +2999,25 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"يحدد مجموعة طرق عرض لإدارة العمليات المتعلقة ب Evibes. يرث صنف EvibesViewSet " -"من ModelViewSet ويوفر وظائف للتعامل مع الإجراءات والعمليات على كيانات " -"Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء الحالي، " -"والأذونات القابلة للتخصيص، وتنسيقات العرض." +"يحدد مجموعة طرق عرض لإدارة العمليات المتعلقة ب Evibes. يرث صنف EvibesViewSet" +" من ModelViewSet ويوفر وظائف للتعامل مع الإجراءات والعمليات على كيانات " +"Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء " +"الحالي، والأذونات القابلة للتخصيص، وتنسيقات العرض." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "يمثل مجموعة طرق عرض لإدارة كائنات AttributeGroup. يتعامل مع العمليات " "المتعلقة ب AttributeGroup، بما في ذلك التصفية والتسلسل واسترجاع البيانات. " -"تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر طريقة " -"موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup." +"تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر " +"طريقة موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3043,20 +3032,21 @@ msgstr "" "البيانات التي يتم إرجاعها، مثل التصفية حسب حقول معينة أو استرجاع معلومات " "مفصلة مقابل معلومات مبسطة حسب الطلب." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"مجموعة طرق عرض لإدارة كائنات AttributeValue. توفر مجموعة طرق العرض هذه وظائف " -"لإدراج كائنات AttributeValue واسترجاعها وإنشائها وتحديثها وحذفها. وهي تتكامل " -"مع آليات مجموعة طرق عرض Django REST Framework وتستخدم المتسلسلات المناسبة " -"للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال DjangoFilterBackend." +"مجموعة طرق عرض لإدارة كائنات AttributeValue. توفر مجموعة طرق العرض هذه وظائف" +" لإدراج كائنات AttributeValue واسترجاعها وإنشائها وتحديثها وحذفها. وهي " +"تتكامل مع آليات مجموعة طرق عرض Django REST Framework وتستخدم المتسلسلات " +"المناسبة للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال " +"DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3065,11 +3055,11 @@ msgid "" "can access specific data." msgstr "" "يدير طرق العرض للعمليات المتعلقة بالفئة. فئة CategoryViewSet مسؤولة عن " -"التعامل مع العمليات المتعلقة بنموذج الفئة في النظام. وهي تدعم استرجاع بيانات " -"الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول " +"التعامل مع العمليات المتعلقة بنموذج الفئة في النظام. وهي تدعم استرجاع بيانات" +" الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول " "المستخدمين المصرح لهم فقط إلى بيانات محددة." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3081,7 +3071,7 @@ msgstr "" "Django's ViewSet لتبسيط تنفيذ نقاط نهاية واجهة برمجة التطبيقات لكائنات " "العلامة التجارية." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3097,7 +3087,7 @@ msgstr "" "عمل Django REST لعمليات RESTful API. يتضمن أساليب لاسترجاع تفاصيل المنتج، " "وتطبيق الأذونات، والوصول إلى الملاحظات ذات الصلة بمنتج ما." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3106,34 +3096,35 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" "يمثل مجموعة طرق عرض لإدارة كائنات المورد. تسمح مجموعة العرض هذه بجلب بيانات " -"البائع وتصفيتها وتسلسلها. وهي تُعرِّف مجموعة الاستعلام، وتكوينات التصفية، وفئات " -"أداة التسلسل المستخدمة للتعامل مع الإجراءات المختلفة. الغرض من هذه الفئة هو " -"توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل Django REST." +"البائع وتصفيتها وتسلسلها. وهي تُعرِّف مجموعة الاستعلام، وتكوينات التصفية، " +"وفئات أداة التسلسل المستخدمة للتعامل مع الإجراءات المختلفة. الغرض من هذه " +"الفئة هو توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل " +"Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "تمثيل مجموعة عرض تتعامل مع كائنات الملاحظات. تدير هذه الفئة العمليات " "المتعلقة بكائنات الملاحظات، بما في ذلك الإدراج والتصفية واسترجاع التفاصيل. " "الغرض من مجموعة العرض هذه هو توفير متسلسلات مختلفة لإجراءات مختلفة وتنفيذ " -"معالجة قائمة على الأذونات لكائنات الملاحظات التي يمكن الوصول إليها. وهي توسع " -"\"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن " -"البيانات." +"معالجة قائمة على الأذونات لكائنات الملاحظات التي يمكن الوصول إليها. وهي توسع" +" \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" +" البيانات." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet لإدارة الطلبات والعمليات ذات الصلة. توفر هذه الفئة وظائف لاسترداد " @@ -3143,12 +3134,12 @@ msgstr "" "عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " "تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "يوفر مجموعة طرق عرض لإدارة كيانات OrderProduct. تتيح مجموعة طرق العرض هذه " @@ -3156,11 +3147,11 @@ msgstr "" "من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " "توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3168,32 +3159,32 @@ msgstr "" "يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " "التطبيقات المختلفة." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "يمثل مجموعة عرض لإدارة الترقيات." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" -"ViewSet لإدارة عمليات قائمة الرغبات. توفر مجموعة طرق عرض قائمة الأمنيات نقاط " -"نهاية للتفاعل مع قائمة أمنيات المستخدم، مما يسمح باسترجاع المنتجات وتعديلها " -"وتخصيصها ضمن قائمة الأمنيات. تسهل مجموعة العرض هذه وظائف مثل الإضافة " +"ViewSet لإدارة عمليات قائمة الرغبات. توفر مجموعة طرق عرض قائمة الأمنيات نقاط" +" نهاية للتفاعل مع قائمة أمنيات المستخدم، مما يسمح باسترجاع المنتجات وتعديلها" +" وتخصيصها ضمن قائمة الأمنيات. تسهل مجموعة العرض هذه وظائف مثل الإضافة " "والإزالة والإجراءات المجمعة لمنتجات قائمة الرغبات. يتم دمج عمليات التحقق من " "الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " "ما لم يتم منح أذونات صريحة." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3206,12 +3197,12 @@ msgstr "" "العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " "ومعالجة الأذونات بناءً على سياق الطلب." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo index 7ae4178063096e2922946090fec96fc5fb9a9aaa..ffa342e6051cafc5d25081611adbb8899c87b6b0 100644 GIT binary patch delta 5514 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 ZK2$Mp&r{L!Z>g*(r?9wc=KuEH``;20>qr0q delta 5480 zcmZ|SdstUR9>?)HKSfOoZ;2vFNZb{Ws~0o@1;Iq1Ffw&PkjgCesYKh-qgHGewRS1l zEw*wsebTa$wYBmA)U?*r(o9Xadu?WI7pcgNwtat?@z40@HQzaN=00jWJm*#w6ek7>o57kFU7=&u|EFpH^e$c*Z2*AmaL6#@t5y40a7M@ z6b`@~RQYo3jtemqm+UdV=|bX9WXQGHh>zk0IPz6v`e6>Lf-gG! zWHM$FKeEr5@pu3=zzbh9CWr<`ye+MbGgL z?7&1^a=@7NG`JD3R>OyknMnS+H;t*re`8nWzhygIeAt+9;@(GWeMxT{^GC{6`XsuN zIE($U9iy<_07AuGk9U{IEk=J}%oq&$$e85;V@f~neD0egpYk#f-u=v&JgoWLm}_y%X=CoeZfA^nmKRoi zY0Q(vW4@*=p8CcZmeXwij*UmW^emf-a!<4wlR^GVKQJTYe}lggC%01vaq>@WTFUJ_ zXUt=s&w6wi^9c_Q{$hLf0;P8mrv^OpD1P6?GkH|-V323x@EuIY|DiTt8pC97nTe<+ zD!`Fgj_SyRs3qR(+>ctiH?fNL%?T1EG?dldGZz!D>S144hdNFhu`j-eJ?Z)Dn1gTk z^h_H011|E+Ff7C*T!fe72Gml1f@*L`u-CbiF_=tTg1%l{?jAgYLy3=JB>sexFs!$Y ztDSYIhMvY;Jb^hX*TGCJIY zeiwV4H&r~U=P9TQXo8DpqRP)l4d8B<{|IWyHle2cAE@_QQ5}32HFIsKy%gyW@H#J) zD^NGp?HG+4QTM?C?2aE|ES`38pAb93L8xPxh{2eJ8rfvjd$UnD=v=%E?{x8#sQ3IP z66)D5yaZ37rt~M&2oeU`8A?NSXq<~nQ6rs!YG9trUxu2Idr>p@7u0)OFacXI2+tr( z?VE2&=&o-^74!yqoj2Y9R6GLd0G zYM^1E+H;)0Q6$vR^v(=EE~ppQIM<_I+<|)Wn9FZ-_882uB!39%CXGXVBW9pFexHk< zMjgxJn2jM}w4?K1PC{#T6KVu^p+?k*;kXUefy1cd`3#?X2`KUGCh8n?M)Mo3-Cr$Q8H5`drnoQIT zj&=E^m`PlNTIxoefE&X(|C33aAw!!f<5JtRJS-ueixK!TYLlKq?b;u(v*QuA1EJ11 z=Sb9f&qsB5F}{E=qL%80p|-=f4)yH_|3HR%{xVL-R-A={BkdKt1a+LALEY_t$7uWt zb)NfO=9x0g!GX9IH6vS5r(ic~FC0Y;MJ)$_1e&lF-B7T{9U z50HJRksLv7)=zOP{){@;qvAYMht;TKdIr^@?@;f@#@nS$LoH!Ba+-WoLn4cem8g+5 zqo(+XvuA=`%Uo1PZ^ab+n~RUSxXUoRX)|y%&zGR;*@oH+XHXpu8*baX1`~DuA10v! zyPa*Q-5Ql>KNd4kySWmzhKo>B|A>np$E%2&U4FkL`#cOaV^OFX$wbZEI8=RQifP}> zC84{2Icj%4i&}~us2ATtjp#UPM17MzvjhuK`MWUL%QRTHDuA4ID*v;7innGdR_5x>1-% zJQX$ahn-KSa{jd$n#oW{4miKUY~l;k>R2_Sru2~W zV^sMcojo#bJQ!8~a2$*osQOBL5|JdTQOBhYRq;+#MF&uK_4}w70wX;Wh67ONImN}3 zP|vIJ0<1;VvmCWV525O7L@m)))J*vAkw_)cf!UZm%64cWYDwy`3Y$=0wUE*F`9#!a zy&lz(TQC#vMXhxUUX4Lx?1eNF6*rG6q1+ypFhE`)W@j;x4DFt@VtU=ZHoin%4#`Vrm3pxKPkTKalsB<27 z#$93aZ+GrTH4rw%{tLDQbvm9!eU1;Kj%_8HvJOXuI#1evvvLtk zHl9LVP?ua|%cr6~a@Clr^ZyVD9kbU^YaWiK%qMROcSVBcBx0?I`#?J`vT2e4)hiFOjYQ0jhX8$5_P#BG>}85Q>P zS&f>h9jJ?{4Yg-tDs8!GsEY4GT})e1r{JBY(Q#>>x1#>$_^f~*sNWnvIKbB27r$9M zsPiwF4E?QaT9HuEC9o_||8e4G6Z4v@d7x=c`qulqRWF!- z-Q4TzSGUBTPws4qKA-%eCDJ7u-mCP&>XTY~)MvF6Hf6T%d*b|q{7NrzkgX-Dec{+@NU^JYiPS#ZmuS6A1}pKb22rPW|m K!_O67?*9SMZQC6H diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po index 763dedff..f5cc4c39 100644 --- a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -28,7 +28,8 @@ msgstr "Je aktivní" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Pokud je nastaveno na false, nemohou tento objekt vidět uživatelé bez " "potřebného oprávnění." @@ -49,89 +50,89 @@ msgstr "Upraveno" msgid "when the object was last modified" msgstr "Kdy byl objekt naposledy upraven" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Překlady" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Obecné" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Vztahy" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "další informace" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Časová razítka" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivace vybraného %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Vybrané položky byly aktivovány!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktivace vybraných %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Vybrané položky byly deaktivovány!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Hodnota atributu" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Hodnoty atributů" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Obrázek" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Obrázky" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Zásoby" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Objednat produkt" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Objednat produkty" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Děti" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfigurace" @@ -155,7 +156,8 @@ msgstr "Doručeno na" msgid "canceled" msgstr "Zrušeno" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Neúspěšný" @@ -197,7 +199,7 @@ msgstr "" "vyjednávání obsahu. Jazyk lze zvolit pomocí Accept-Language a parametru " "dotazu." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Vstup/výstup mezipaměti" @@ -221,7 +223,7 @@ msgstr "Získání vystavitelných parametrů aplikace" msgid "send a message to the support team" msgstr "Odeslání zprávy týmu podpory" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Vyžádejte si adresu URL s protokolem CORS. Povoleno pouze https." @@ -272,7 +274,8 @@ msgstr "" "Přepsání existující skupiny atributů s uložením neupravitelných položek" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Přepsání některých polí existující skupiny atributů s uložením " "neupravitelných položek" @@ -324,7 +327,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "Přepsání existující hodnoty atributu uložením neupravitelných položek" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Přepsání některých polí existující hodnoty atributu s uložením " "neupravitelných položek" @@ -360,9 +364,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Meta snímek SEO" @@ -382,12 +386,12 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Vyhledávání podřetězců bez ohledu na velikost písmen v položkách " -"human_readable_id, order_products.product.name a order_products.product." -"partnumber" +"human_readable_id, order_products.product.name a " +"order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -423,9 +427,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Řazení podle jedné z následujících možností: uuid, human_readable_id, " "user_email, user, status, created, modified, buy_time, random. Pro sestupné " @@ -470,8 +474,8 @@ msgid "" "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -"Dokončí nákup objednávky. Pokud je použito `force_balance`, nákup se dokončí " -"s použitím zůstatku uživatele; pokud je použito `force_payment`, zahájí se " +"Dokončí nákup objednávky. Pokud je použito `force_balance`, nákup se dokončí" +" s použitím zůstatku uživatele; pokud je použito `force_payment`, zahájí se " "transakce." #: engine/core/docs/drf/viewsets.py:397 @@ -482,7 +486,7 @@ msgstr "načtení aktuální nevyřízené objednávky uživatele." msgid "retrieves a current pending order of an authenticated user" msgstr "načte aktuální čekající objednávku ověřeného uživatele." -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "zakoupení objednávky bez vytvoření účtu" @@ -602,7 +606,8 @@ msgstr "Přidání mnoha produktů do seznamu přání" #: engine/core/docs/drf/viewsets.py:533 msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "Přidá mnoho produktů do seznamu přání pomocí zadaných `product_uuids`." +msgstr "" +"Přidá mnoho produktů do seznamu přání pomocí zadaných `product_uuids`." #: engine/core/docs/drf/viewsets.py:541 msgid "remove many products from wishlist" @@ -618,28 +623,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrování podle jedné nebo více dvojic název/hodnota atributu. \n" "- **Syntaxe**: `attr_name=method-value[;attr2=method2-value2]...`\n" -"- **Metody** (pokud je vynecháno, výchozí hodnota je `obsahuje`): `iexact`, " -"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, " -"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"- **Typování hodnot**: Pro booleany, celá čísla, floaty se nejprve zkouší " -"JSON (takže můžete předávat seznamy/dicty), `true`/`false`; jinak se s nimi " -"zachází jako s řetězci. \n" -"- **Base64**: předpona `b64-` pro bezpečné zakódování surové hodnoty do URL " -"base64. \n" +"- **Metody** (pokud je vynecháno, výchozí hodnota je `obsahuje`): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- **Typování hodnot**: Pro booleany, celá čísla, floaty se nejprve zkouší JSON (takže můžete předávat seznamy/dicty), `true`/`false`; jinak se s nimi zachází jako s řetězci. \n" +"- **Base64**: předpona `b64-` pro bezpečné zakódování surové hodnoty do URL base64. \n" "Příklady: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -654,12 +649,10 @@ msgstr "(přesně) UUID produktu" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Seznam polí oddělených čárkou, podle kterých se má třídit. Pro sestupné " -"řazení použijte předponu `-`. \n" +"Seznam polí oddělených čárkou, podle kterých se má třídit. Pro sestupné řazení použijte předponu `-`. \n" "**Povolené:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -673,6 +666,9 @@ msgid "Product UUID or slug" msgstr "Identifikátor UUID produktu nebo Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Vytvoření produktu" @@ -914,7 +910,8 @@ msgstr "Odstranění povýšení" #: engine/core/docs/drf/viewsets.py:1169 msgid "rewrite an existing promotion saving non-editables" -msgstr "Přepsání existující propagační akce s uložením neupravitelných položek" +msgstr "" +"Přepsání existující propagační akce s uložením neupravitelných položek" #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" @@ -965,7 +962,8 @@ msgstr "Odstranění značky produktu" #: engine/core/docs/drf/viewsets.py:1259 msgid "rewrite an existing product tag saving non-editables" -msgstr "Přepsání existující značky produktu s uložením neupravitelných položek" +msgstr "" +"Přepsání existující značky produktu s uložením neupravitelných položek" #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" @@ -1101,247 +1099,249 @@ msgstr "Úroveň" msgid "Product UUID" msgstr "UUID produktu" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Klíč k vyhledání v keši nebo nastavení do keše" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data k uložení do mezipaměti" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Časový limit v sekundách pro nastavení dat do mezipaměti" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Data uložená v mezipaměti" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Kamelizovaná data JSON z požadované adresy URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Přidání produktu do objednávky" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Objednávka {order_uuid} nebyla nalezena!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Odstranění všech produktů z objednávky" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Koupit objednávku" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Zadejte prosím order_uuid nebo order_hr_id - vzájemně se vylučují!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Provedení akce na seznamu produktů v objednávce" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Odebrat/přidat" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Akce musí být buď \"přidat\", nebo \"odebrat\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Provedení akce na seznamu produktů v seznamu přání" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Zadejte prosím hodnotu `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Seznam přání {wishlist_uuid} nenalezen!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Přidání produktu do objednávky" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Koupit objednávku" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" -"Prosím, pošlete atributy jako řetězec ve formátu attr1=hodnota1," -"attr2=hodnota2." +"Prosím, pošlete atributy jako řetězec ve formátu " +"attr1=hodnota1,attr2=hodnota2." -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Přidání nebo odstranění zpětné vazby pro objednávkuprodukt" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Akce musí být buď `add` nebo `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nenalezen!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Původní řetězec adresy zadaný uživatelem" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Limit musí být mezi 1 a 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funguje jako kouzlo" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Atributy" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Seskupené atributy" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Skupiny atributů" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Značky" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procento přirážky" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "Které atributy a hodnoty lze použít pro filtrování této kategorie." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" -"Minimální a maximální ceny produktů v této kategorii, pokud jsou k dispozici." +"Minimální a maximální ceny produktů v této kategorii, pokud jsou k " +"dispozici." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Štítky pro tuto kategorii" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkty v této kategorii" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Prodejci" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Zeměpisná šířka (souřadnice Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Zeměpisná délka (souřadnice X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Jak na to" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Hodnota hodnocení od 1 do 10 včetně nebo 0, pokud není nastaveno." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Představuje zpětnou vazbu od uživatele." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Oznámení" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Stáhněte si url adresu pro tento objednaný produkt, pokud je to možné" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Zpětná vazba" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Seznam objednaných produktů v tomto pořadí" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Fakturační adresa" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1349,53 +1349,53 @@ msgstr "" "Dodací adresa pro tuto objednávku, pokud je stejná jako fakturační adresa " "nebo pokud není použitelná, ponechte prázdné." -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Celková cena této objednávky" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Celkové množství objednaných produktů" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Jsou všechny produkty v objednávce digitální" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transakce pro tuto objednávku" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Objednávky" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Adresa URL obrázku" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Obrázky produktu" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Zpětná vazba" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Značka" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Skupiny atributů" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1403,7 +1403,7 @@ msgstr "Skupiny atributů" msgid "price" msgstr "Cena" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1411,39 +1411,39 @@ msgstr "Cena" msgid "quantity" msgstr "Množství" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Počet zpětných vazeb" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkty jsou k dispozici pouze pro osobní objednávky" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Cena se slevou" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produkty" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Propagační kódy" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkty v prodeji" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Propagační akce" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Prodejce" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1451,99 +1451,99 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Seznamy přání" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produkty s příznakem" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Štítky produktu" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Kategorie s příznakem" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Štítky kategorií" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Název projektu" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Název společnosti" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Adresa společnosti" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Telefonní číslo společnosti" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', někdy se musí použít místo hodnoty hostitelského uživatele." -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Uživatel hostitelského e-mailu" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Maximální částka pro platbu" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Minimální částka pro platbu" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analytická data" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Reklamní údaje" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfigurace" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Kód jazyka" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Název jazyka" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Příznak jazyka, pokud existuje :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Získat seznam podporovaných jazyků" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Výsledky vyhledávání produktů" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Výsledky vyhledávání produktů" @@ -1590,8 +1590,8 @@ msgstr "" "dodavatelích a jejich požadavcích na interakci. Třída Vendor se používá k " "definování a správě informací týkajících se externího dodavatele. Uchovává " "jméno prodejce, údaje o ověření požadované pro komunikaci a procentuální " -"přirážku použitou na produkty získané od prodejce. Tento model také uchovává " -"další metadata a omezení, takže je vhodný pro použití v systémech, které " +"přirážku použitou na produkty získané od prodejce. Tento model také uchovává" +" další metadata a omezení, takže je vhodný pro použití v systémech, které " "komunikují s prodejci třetích stran." #: engine/core/models.py:124 @@ -1706,8 +1706,8 @@ msgstr "" "jinými kategoriemi a podporovat vztahy rodič-dítě. Třída obsahuje pole pro " "metadata a vizuální zobrazení, která slouží jako základ pro funkce " "související s kategoriemi. Tato třída se obvykle používá k definování a " -"správě kategorií produktů nebo jiných podobných seskupení v rámci aplikace a " -"umožňuje uživatelům nebo správcům zadávat název, popis a hierarchii " +"správě kategorií produktů nebo jiných podobných seskupení v rámci aplikace a" +" umožňuje uživatelům nebo správcům zadávat název, popis a hierarchii " "kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo " "priorita." @@ -1760,7 +1760,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Reprezentuje objekt značky v systému. Tato třída zpracovává informace a " "atributy související se značkou, včetně jejího názvu, loga, popisu, " @@ -1809,8 +1810,8 @@ msgstr "Kategorie" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1903,10 +1904,10 @@ msgstr "" "digitální stav, název, popis, číslo dílu a přípona. Poskytuje související " "užitečné vlastnosti pro získání hodnocení, počtu zpětných vazeb, ceny, " "množství a celkového počtu objednávek. Určeno pro použití v systému, který " -"zpracovává elektronické obchodování nebo správu zásob. Tato třída komunikuje " -"se souvisejícími modely (například Category, Brand a ProductTag) a spravuje " -"ukládání často přistupovaných vlastností do mezipaměti pro zlepšení výkonu. " -"Používá se k definování a manipulaci s údaji o produktu a souvisejícími " +"zpracovává elektronické obchodování nebo správu zásob. Tato třída komunikuje" +" se souvisejícími modely (například Category, Brand a ProductTag) a spravuje" +" ukládání často přistupovaných vlastností do mezipaměti pro zlepšení výkonu." +" Používá se k definování a manipulaci s údaji o produktu a souvisejícími " "informacemi v rámci aplikace." #: engine/core/models.py:585 @@ -1962,8 +1963,8 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Reprezentuje atribut v systému. Tato třída slouží k definování a správě " @@ -2032,12 +2033,12 @@ msgstr "Atribut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"Představuje konkrétní hodnotu atributu, který je spojen s produktem. Spojuje " -"\"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a " +"Představuje konkrétní hodnotu atributu, který je spojen s produktem. Spojuje" +" \"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a " "dynamickou reprezentaci vlastností produktu." #: engine/core/models.py:788 @@ -2055,15 +2056,15 @@ msgstr "Konkrétní hodnota tohoto atributu" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Představuje obrázek produktu spojený s produktem v systému. Tato třída je " "určena ke správě obrázků produktů, včetně funkcí pro nahrávání souborů s " -"obrázky, jejich přiřazování ke konkrétním produktům a určování pořadí jejich " -"zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro " +"obrázky, jejich přiřazování ke konkrétním produktům a určování pořadí jejich" +" zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro " "obrázky." #: engine/core/models.py:826 @@ -2104,13 +2105,13 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"Představuje propagační kampaň na produkty se slevou. Tato třída se používá k " -"definici a správě propagačních kampaní, které nabízejí procentuální slevu na " -"produkty. Třída obsahuje atributy pro nastavení slevové sazby, poskytnutí " -"podrobností o akci a její propojení s příslušnými produkty. Integruje se s " +"Představuje propagační kampaň na produkty se slevou. Tato třída se používá k" +" definici a správě propagačních kampaní, které nabízejí procentuální slevu " +"na produkty. Třída obsahuje atributy pro nastavení slevové sazby, poskytnutí" +" podrobností o akci a její propojení s příslušnými produkty. Integruje se s " "katalogem produktů, aby bylo možné určit položky, kterých se kampaň týká." #: engine/core/models.py:880 @@ -2179,8 +2180,8 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Představuje dokumentační záznam vázaný na produkt. Tato třída se používá k " "ukládání informací o dokumentech souvisejících s konkrétními produkty, " @@ -2202,22 +2203,22 @@ msgstr "Nevyřešené" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Reprezentuje entitu adresy, která obsahuje údaje o umístění a asociace s " "uživatelem. Poskytuje funkce pro ukládání geografických a adresních dat a " "integraci se službami geokódování. Tato třída je určena k ukládání " "podrobných informací o adrese včetně komponent, jako je ulice, město, " "region, země a geolokace (zeměpisná délka a šířka). Podporuje integraci se " -"službami API pro geokódování a umožňuje ukládání nezpracovaných odpovědí API " -"pro další zpracování nebo kontrolu. Třída také umožňuje přiřadit adresu k " +"službami API pro geokódování a umožňuje ukládání nezpracovaných odpovědí API" +" pro další zpracování nebo kontrolu. Třída také umožňuje přiřadit adresu k " "uživateli, což usnadňuje personalizované zpracování dat." #: engine/core/models.py:1029 @@ -2373,8 +2374,8 @@ msgstr "Neplatný typ slevy pro promokód {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2458,7 +2459,8 @@ msgstr "Uživatel smí mít vždy pouze jednu čekající objednávku!" #: engine/core/models.py:1351 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." +msgstr "" +"Do objednávky, která není v procesu vyřizování, nelze přidat produkty." #: engine/core/models.py:1356 msgid "you cannot add inactive products to order" @@ -2539,8 +2541,8 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" "spravuje zpětnou vazbu uživatelů k produktům. Tato třída je určena k " -"zachycování a ukládání zpětné vazby uživatelů ke konkrétním produktům, které " -"si zakoupili. Obsahuje atributy pro ukládání komentářů uživatelů, odkaz na " +"zachycování a ukládání zpětné vazby uživatelů ke konkrétním produktům, které" +" si zakoupili. Obsahuje atributy pro ukládání komentářů uživatelů, odkaz na " "související produkt v objednávce a hodnocení přiřazené uživatelem. Třída " "využívá databázová pole k efektivnímu modelování a správě dat zpětné vazby." @@ -2553,7 +2555,8 @@ msgid "feedback comments" msgstr "Zpětná vazba" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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á." @@ -2698,9 +2701,9 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Představuje funkci stahování digitálních aktiv spojených s objednávkami. " "Třída DigitalAssetDownload poskytuje možnost spravovat a zpřístupňovat " @@ -2764,8 +2767,7 @@ msgstr "Ahoj %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Děkujeme vám za vaši objednávku #%(order.pk)s! S potěšením Vám oznamujeme, " @@ -2880,8 +2882,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Děkujeme vám za vaši objednávku! S potěšením potvrzujeme váš nákup. Níže " @@ -2922,23 +2923,23 @@ msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund. #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | kontaktujte nás inicioval" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | kontaktujte nás inicioval" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Potvrzení objednávky" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | potvrzení objednávky" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Objednávka doručena" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | doručená objednávka" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode uděleno" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode uděleno" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2986,8 +2987,8 @@ msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -"Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se " -"zadaným klíčem a časovým limitem." +"Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se" +" zadaným klíčem a časovým limitem." #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -3012,14 +3013,10 @@ msgstr "Řeší logiku nákupu jako firmy bez registrace." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Zpracovává stahování digitálního aktiva spojeného s objednávkou.\n" -"Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v " -"adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba " -"HTTP 404, která označuje, že zdroj není k dispozici." +"Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3048,31 +3045,27 @@ msgstr "favicon nebyl nalezen" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Zpracovává požadavky na favicon webové stránky.\n" -"Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém " -"adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP " -"404, která označuje, že zdroj není k dispozici." +"Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Přesměruje požadavek na indexovou stránku správce. Funkce zpracovává " "příchozí požadavky HTTP a přesměrovává je na indexovou stránku " -"administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá " -"funkci `redirect` Djanga." +"administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá" +" funkci `redirect` Djanga." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "Vrací aktuální verzi systému eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3083,14 +3076,16 @@ msgstr "" "Definuje sadu pohledů pro správu operací souvisejících s Evibes. Třída " "EvibesViewSet dědí z ModelViewSet a poskytuje funkce pro zpracování akcí a " "operací s entitami Evibes. Zahrnuje podporu dynamických tříd serializátorů " -"na základě aktuální akce, přizpůsobitelných oprávnění a formátů vykreslování." +"na základě aktuální akce, přizpůsobitelných oprávnění a formátů " +"vykreslování." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Představuje sadu pohledů pro správu objektů AttributeGroup. Zpracovává " "operace související s AttributeGroup, včetně filtrování, serializace a " @@ -3098,7 +3093,7 @@ msgstr "" "standardizovaný způsob zpracování požadavků a odpovědí pro data " "AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3114,13 +3109,13 @@ msgstr "" "konkrétních polí nebo získávání podrobných a zjednodušených informací v " "závislosti na požadavku." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Sada pohledů pro správu objektů AttributeValue. Tato sada pohledů poskytuje " "funkce pro výpis, načítání, vytváření, aktualizaci a mazání objektů " @@ -3128,7 +3123,7 @@ msgstr "" "pro různé akce používá příslušné serializátory. Možnosti filtrování jsou " "poskytovány prostřednictvím DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3142,7 +3137,7 @@ msgstr "" "kategorie. Sada pohledů také vynucuje oprávnění, aby zajistila, že ke " "konkrétním datům budou mít přístup pouze oprávnění uživatelé." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3154,7 +3149,7 @@ msgstr "" "rámec ViewSet Djanga pro zjednodušení implementace koncových bodů API pro " "objekty Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3169,10 +3164,10 @@ msgstr "" "serializace a operací s konkrétními instancemi. Rozšiřuje se z " "`EvibesViewSet`, aby využívala společné funkce, a integruje se s rámcem " "Django REST pro operace RESTful API. Obsahuje metody pro načítání " -"podrobností o produktu, uplatňování oprávnění a přístup k související zpětné " -"vazbě produktu." +"podrobností o produktu, uplatňování oprávnění a přístup k související zpětné" +" vazbě produktu." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3186,13 +3181,13 @@ msgstr "" "různých akcí. Účelem této třídy je poskytnout zjednodušený přístup ke " "zdrojům souvisejícím s Vendorem prostřednictvím rámce Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Reprezentace sady zobrazení, která zpracovává objekty zpětné vazby. Tato " @@ -3202,43 +3197,43 @@ msgstr "" "objekty Zpětné vazby na základě oprávnění. Rozšiřuje základní třídu " "`EvibesViewSet` a využívá systém filtrování Djanga pro dotazování na data." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet pro správu objednávek a souvisejících operací. Tato třída poskytuje " "funkce pro načítání, úpravu a správu objektů objednávek. Obsahuje různé " "koncové body pro zpracování operací s objednávkami, jako je přidávání nebo " "odebírání produktů, provádění nákupů pro registrované i neregistrované " -"uživatele a načítání nevyřízených objednávek aktuálního ověřeného uživatele. " -"Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a " -"podle toho vynucuje oprávnění při interakci s daty objednávek." +"uživatele a načítání nevyřízených objednávek aktuálního ověřeného uživatele." +" Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a" +" podle toho vynucuje oprávnění při interakci s daty objednávek." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Poskytuje sadu pohledů pro správu entit OrderProduct. Tato sada pohledů " "umožňuje operace CRUD a vlastní akce specifické pro model OrderProduct. " -"Zahrnuje filtrování, kontroly oprávnění a přepínání serializátoru na základě " -"požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " +"Zahrnuje filtrování, kontroly oprávnění a přepínání serializátoru na základě" +" požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " "vazby na instance OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Spravuje operace související s obrázky produktů v aplikaci." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3246,20 +3241,20 @@ msgstr "" "Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " "akcí API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Představuje sadu zobrazení pro správu povýšení." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Zpracovává operace související s údaji o zásobách v systému." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3272,7 +3267,7 @@ msgstr "" "uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " "udělena výslovná oprávnění." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3280,18 +3275,18 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"Tato třída poskytuje funkce sady pohledů pro správu objektů `Address`. Třída " -"AddressViewSet umožňuje operace CRUD, filtrování a vlastní akce související " -"s entitami adres. Obsahuje specializované chování pro různé metody HTTP, " +"Tato třída poskytuje funkce sady pohledů pro správu objektů `Address`. Třída" +" AddressViewSet umožňuje operace CRUD, filtrování a vlastní akce související" +" s entitami adres. Obsahuje specializované chování pro různé metody HTTP, " "přepisování serializátoru a zpracování oprávnění na základě kontextu " "požadavku." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3302,5 +3297,5 @@ msgstr "" "Zpracovává operace související se značkami produktů v rámci aplikace. Tato " "třída poskytuje funkce pro načítání, filtrování a serializaci objektů " "Product Tag. Podporuje flexibilní filtrování podle konkrétních atributů " -"pomocí zadaného filtru backend a dynamicky používá různé serializátory podle " -"prováděné akce." +"pomocí zadaného filtru backend a dynamicky používá různé serializátory podle" +" prováděné akce." diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.mo b/engine/core/locale/da_DK/LC_MESSAGES/django.mo index 170038a05089ad13d74efafc6bc119024079a637..7faad8929fa61fd6fb7bcb4b4ca6f8feef38136d 100644 GIT binary patch delta 5527 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 Q)H~(Wh4|MtkMoBA4}_Q64gdfE diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.po b/engine/core/locale/da_DK/LC_MESSAGES/django.po index 249b663a..0c3d119a 100644 --- a/engine/core/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/core/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -27,7 +27,8 @@ msgstr "Er aktiv" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Hvis det er sat til false, kan dette objekt ikke ses af brugere uden den " "nødvendige tilladelse." @@ -48,89 +49,89 @@ msgstr "Modificeret" msgid "when the object was last modified" msgstr "Hvornår objektet sidst blev redigeret" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Oversættelser" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Generelt" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relationer" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "Yderligere info" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Tidsstempler" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivér valgt %(verbose_name_plural)s." -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Udvalgte varer er blevet aktiveret!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgte %(verbose_name_plural)s." -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Udvalgte varer er blevet deaktiveret!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Attributværdi" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Attributværdier" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Billede" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Billeder" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Lager" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Aktier" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Bestil produkt" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Bestil produkter" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Børn" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfig" @@ -154,7 +155,8 @@ msgstr "Leveret" msgid "canceled" msgstr "Annulleret" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Mislykket" @@ -195,7 +197,7 @@ msgstr "" "OpenApi3-skema for denne API. Format kan vælges via indholdsforhandling. " "Sprog kan vælges med både Accept-Language og query parameter." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache-I/O" @@ -205,8 +207,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Anvend kun en nøgle til at læse tilladte data fra cachen.\n" -"Anvend nøgle, data og timeout med autentificering for at skrive data til " -"cachen." +"Anvend nøgle, data og timeout med autentificering for at skrive data til cachen." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -220,7 +221,7 @@ msgstr "Hent applikationens eksponerbare parametre" msgid "send a message to the support team" msgstr "Send en besked til supportteamet" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Anmod om en CORSed URL. Kun https er tilladt." @@ -271,7 +272,8 @@ msgstr "" "attributter" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende attributgruppe og gem ikke-" "redigerbare felter" @@ -324,10 +326,11 @@ msgstr "" "Omskriv en eksisterende attributværdi, der gemmer ikke-redigerbare filer" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" -"Omskriv nogle felter i en eksisterende attributværdi og gem ikke-redigerbare " -"felter" +"Omskriv nogle felter i en eksisterende attributværdi og gem ikke-redigerbare" +" felter" #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 msgid "list all categories (simple view)" @@ -361,9 +364,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO-meta-snapshot" @@ -377,16 +380,17 @@ msgstr "Liste over alle kategorier (enkel visning)" #: engine/core/docs/drf/viewsets.py:275 msgid "for non-staff users, only their own orders are returned." -msgstr "For ikke-ansatte brugere er det kun deres egne ordrer, der returneres." +msgstr "" +"For ikke-ansatte brugere er det kun deres egne ordrer, der returneres." #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Substringsøgning uden brug af store og små bogstaver på tværs af " -"human_readable_id, order_products.product.name og order_products.product." -"partnumber" +"human_readable_id, order_products.product.name og " +"order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -418,13 +422,13 @@ msgstr "Filtrer efter ordrestatus (case-insensitive substring match)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Bestil efter en af: uuid, human_readable_id, user_email, user, status, " -"created, modified, buy_time, random. Præfiks med '-' for faldende rækkefølge " -"(f.eks. '-buy_time')." +"created, modified, buy_time, random. Præfiks med '-' for faldende rækkefølge" +" (f.eks. '-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -478,7 +482,7 @@ msgstr "Hent en brugers aktuelle afventende ordre" msgid "retrieves a current pending order of an authenticated user" msgstr "henter en aktuel afventende ordre fra en autentificeret bruger" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "Køb en ordre uden at oprette en konto" @@ -594,7 +598,8 @@ msgstr "Fjern et produkt fra ønskelisten" #: engine/core/docs/drf/viewsets.py:524 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" -"Fjerner et produkt fra en ønskeliste ved hjælp af den angivne `product_uuid`." +"Fjerner et produkt fra en ønskeliste ved hjælp af den angivne " +"`product_uuid`." #: engine/core/docs/drf/viewsets.py:532 msgid "add many products to wishlist" @@ -621,28 +626,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrer efter et eller flere attributnavn/værdipar. \n" "- **Syntaks**: `attr_name=method-value[;attr2=method2-value2]...`.\n" -"- **Metoder** (standard er `icontains`, hvis udeladt): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" -"- Værdiindtastning**: JSON forsøges først (så du kan sende lister/dikter), " -"`true`/`false` for booleans, heltal, floats; ellers behandles de som " -"strenge. \n" -"- **Base64**: præfiks med `b64-` for URL-sikker base64-kodning af den rå " -"værdi. \n" +"- **Metoder** (standard er `icontains`, hvis udeladt): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" +"- Værdiindtastning**: JSON forsøges først (så du kan sende lister/dikter), `true`/`false` for booleans, heltal, floats; ellers behandles de som strenge. \n" +"- **Base64**: præfiks med `b64-` for URL-sikker base64-kodning af den rå værdi. \n" "Eksempler på dette: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." @@ -657,12 +652,10 @@ msgstr "(præcis) Produkt-UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Kommasepareret liste over felter, der skal sorteres efter. Præfiks med `-` " -"for faldende. \n" +"Kommasepareret liste over felter, der skal sorteres efter. Præfiks med `-` for faldende. \n" "**Tilladt:** uuid, vurdering, navn, slug, oprettet, ændret, pris, tilfældig" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -676,6 +669,9 @@ msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Opret et produkt" @@ -1108,251 +1104,253 @@ msgstr "Niveau" msgid "Product UUID" msgstr "Produkt UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Nøgle til at lede efter i eller lægge i cachen" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data, der skal gemmes i cachen" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder for at lægge data i cachen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Cachelagrede data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Cameliserede JSON-data fra den ønskede URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Kun URL'er, der starter med http(s)://, er tilladt." -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Tilføj et produkt til ordren" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke fundet!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Fjern alle produkter fra ordren" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Køb en ordre" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Udfør en handling på en liste af produkter i ordren" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Fjern/tilføj" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Handlingen skal være enten \"tilføj\" eller \"fjern\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Udfør en handling på en liste af produkter i ønskelisten" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Angiv venligst værdien `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke fundet!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Tilføj et produkt til ordren" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Køb en ordre" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" -"Send venligst attributterne som en streng formateret som attr1=værdi1," -"attr2=værdi2" +"Send venligst attributterne som en streng formateret som " +"attr1=værdi1,attr2=værdi2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Tilføj eller slet en feedback til ordreproduktet" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Handlingen skal være enten `add` eller `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Ordreprodukt {order_product_uuid} ikke fundet!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Original adressestreng leveret af brugeren" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Grænsen skal være mellem 1 og 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en charme" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Egenskaber" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grupperede attributter" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupper af attributter" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Mærker" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup-procentdel" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -"Hvilke attributter og værdier, der kan bruges til at filtrere denne kategori." +"Hvilke attributter og værdier, der kan bruges til at filtrere denne " +"kategori." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Minimums- og maksimumspriser for produkter i denne kategori, hvis de er " "tilgængelige." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags for denne kategori" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkter i denne kategori" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Leverandører" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breddegrad (Y-koordinat)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Længdegrad (X-koordinat)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Sådan gør du" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Vurderingsværdi fra 1 til 10, inklusive, eller 0, hvis den ikke er " "indstillet." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Repræsenterer feedback fra en bruger." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Meddelelser" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url for dette ordreprodukt, hvis det er relevant" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne ordre" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Faktureringsadresse" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1360,53 +1358,53 @@ msgstr "" "Leveringsadresse for denne ordre, lad den være tom, hvis den er den samme " "som faktureringsadressen, eller hvis den ikke er relevant" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Samlet pris for denne ordre" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Samlet antal produkter i ordren" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Er alle produkterne i ordren digitale?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transaktioner for denne ordre" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Bestillinger" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Billed-URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Produktets billeder" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attributgrupper" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1414,7 +1412,7 @@ msgstr "Attributgrupper" msgid "price" msgstr "Pris" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1422,39 +1420,39 @@ msgstr "Pris" msgid "quantity" msgstr "Mængde" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Antal tilbagemeldinger" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkter kun tilgængelige for personlige bestillinger" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Rabatpris" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produkter" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promokoder" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkter til salg" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Kampagner" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Leverandør" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1462,99 +1460,99 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Ønskelister" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Mærkede produkter" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Produktmærker" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Tagged kategorier" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategoriernes tags" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Projektets navn" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Virksomhedens navn" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Virksomhedens adresse" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Virksomhedens telefonnummer" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'e-mail fra', nogle gange skal den bruges i stedet for værtsbrugerværdien" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "E-mail-værtsbruger" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Maksimalt beløb til betaling" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Minimumsbeløb for betaling" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analytiske data" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Data om reklamer" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfiguration" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Sprogkode" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Sprogets navn" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Sprogflag, hvis det findes :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Få en liste over understøttede sprog" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Søgeresultater for produkter" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Søgeresultater for produkter" @@ -1599,12 +1597,12 @@ msgid "" msgstr "" "Repræsenterer en vendor-enhed, der er i stand til at lagre oplysninger om " "eksterne leverandører og deres interaktionskrav. Vendor-klassen bruges til " -"at definere og administrere oplysninger om en ekstern leverandør. Den gemmer " -"leverandørens navn, godkendelsesoplysninger, der kræves til kommunikation, " +"at definere og administrere oplysninger om en ekstern leverandør. Den gemmer" +" leverandørens navn, godkendelsesoplysninger, der kræves til kommunikation, " "og den procentvise markering, der anvendes på produkter, der hentes fra " "leverandøren. Denne model vedligeholder også yderligere metadata og " -"begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer " -"med tredjepartsleverandører." +"begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer" +" med tredjepartsleverandører." #: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" @@ -1660,8 +1658,8 @@ msgstr "" "identificere produkter. ProductTag-klassen er designet til entydigt at " "identificere og klassificere produkter gennem en kombination af en intern " "tag-identifikator og et brugervenligt visningsnavn. Den understøtter " -"operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning " -"af metadata til administrative formål." +"operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning" +" af metadata til administrative formål." #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1720,9 +1718,9 @@ msgstr "" "Klassen indeholder felter til metadata og visuel repræsentation, som " "fungerer som et fundament for kategorirelaterede funktioner. Denne klasse " "bruges typisk til at definere og administrere produktkategorier eller andre " -"lignende grupperinger i en applikation, så brugere eller administratorer kan " -"angive navn, beskrivelse og hierarki for kategorier samt tildele attributter " -"som billeder, tags eller prioritet." +"lignende grupperinger i en applikation, så brugere eller administratorer kan" +" angive navn, beskrivelse og hierarki for kategorier samt tildele " +"attributter som billeder, tags eller prioritet." #: engine/core/models.py:274 msgid "upload an image representing this category" @@ -1773,12 +1771,13 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"Repræsenterer et brand-objekt i systemet. Denne klasse håndterer oplysninger " -"og attributter relateret til et brand, herunder dets navn, logoer, " -"beskrivelse, tilknyttede kategorier, en unik slug og prioriteret rækkefølge. " -"Den gør det muligt at organisere og repræsentere brand-relaterede data i " +"Repræsenterer et brand-objekt i systemet. Denne klasse håndterer oplysninger" +" og attributter relateret til et brand, herunder dets navn, logoer, " +"beskrivelse, tilknyttede kategorier, en unik slug og prioriteret rækkefølge." +" Den gør det muligt at organisere og repræsentere brand-relaterede data i " "applikationen." #: engine/core/models.py:448 @@ -1823,8 +1822,8 @@ msgstr "Kategorier" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1832,8 +1831,8 @@ msgid "" msgstr "" "Repræsenterer lageret af et produkt, der administreres i systemet. Denne " "klasse giver detaljer om forholdet mellem leverandører, produkter og deres " -"lageroplysninger samt lagerrelaterede egenskaber som pris, købspris, mængde, " -"SKU og digitale aktiver. Den er en del af lagerstyringssystemet for at " +"lageroplysninger samt lagerrelaterede egenskaber som pris, købspris, mængde," +" SKU og digitale aktiver. Den er en del af lagerstyringssystemet for at " "muliggøre sporing og evaluering af produkter, der er tilgængelige fra " "forskellige leverandører." @@ -1918,8 +1917,8 @@ msgstr "" "egenskaber til at hente vurderinger, antal tilbagemeldinger, pris, antal og " "samlede ordrer. Designet til brug i et system, der håndterer e-handel eller " "lagerstyring. Denne klasse interagerer med relaterede modeller (såsom " -"Category, Brand og ProductTag) og administrerer caching for hyppigt anvendte " -"egenskaber for at forbedre ydeevnen. Den bruges til at definere og " +"Category, Brand og ProductTag) og administrerer caching for hyppigt anvendte" +" egenskaber for at forbedre ydeevnen. Den bruges til at definere og " "manipulere produktdata og tilhørende oplysninger i en applikation." #: engine/core/models.py:585 @@ -1975,13 +1974,13 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"Repræsenterer en attribut i systemet. Denne klasse bruges til at definere og " -"administrere attributter, som er data, der kan tilpasses, og som kan knyttes " -"til andre enheder. Attributter har tilknyttede kategorier, grupper, " +"Repræsenterer en attribut i systemet. Denne klasse bruges til at definere og" +" administrere attributter, som er data, der kan tilpasses, og som kan " +"knyttes til andre enheder. Attributter har tilknyttede kategorier, grupper, " "værdityper og navne. Modellen understøtter flere typer værdier, herunder " "string, integer, float, boolean, array og object. Det giver mulighed for " "dynamisk og fleksibel datastrukturering." @@ -2037,7 +2036,8 @@ msgstr "er filtrerbar" #: engine/core/models.py:759 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -"Hvilke attributter og værdier, der kan bruges til at filtrere denne kategori." +"Hvilke attributter og værdier, der kan bruges til at filtrere denne " +"kategori." #: engine/core/models.py:771 engine/core/models.py:789 #: engine/core/templates/digital_order_delivered_email.html:134 @@ -2046,9 +2046,9 @@ msgstr "Attribut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Repræsenterer en specifik værdi for en attribut, der er knyttet til et " "produkt. Den forbinder 'attributten' med en unik 'værdi', hvilket giver " @@ -2070,8 +2070,8 @@ msgstr "Den specifikke værdi for denne attribut" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2119,8 +2119,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Repræsenterer en reklamekampagne for produkter med rabat. Denne klasse " "bruges til at definere og administrere kampagner, der tilbyder en " @@ -2196,8 +2196,8 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Repræsenterer en dokumentarisk post, der er knyttet til et produkt. Denne " "klasse bruges til at gemme oplysninger om dokumentarfilm relateret til " @@ -2220,14 +2220,14 @@ msgstr "Uafklaret" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Repræsenterer en adresseenhed, der indeholder placeringsoplysninger og " "tilknytninger til en bruger. Indeholder funktionalitet til lagring af " @@ -2302,9 +2302,9 @@ msgid "" msgstr "" "Repræsenterer en kampagnekode, der kan bruges til rabatter, og styrer dens " "gyldighed, rabattype og anvendelse. PromoCode-klassen gemmer oplysninger om " -"en kampagnekode, herunder dens unikke identifikator, rabattegenskaber (beløb " -"eller procent), gyldighedsperiode, tilknyttet bruger (hvis nogen) og status " -"for dens brug. Den indeholder funktionalitet til at validere og anvende " +"en kampagnekode, herunder dens unikke identifikator, rabattegenskaber (beløb" +" eller procent), gyldighedsperiode, tilknyttet bruger (hvis nogen) og status" +" for dens brug. Den indeholder funktionalitet til at validere og anvende " "kampagnekoden på en ordre og samtidig sikre, at begrænsningerne er opfyldt." #: engine/core/models.py:1087 @@ -2393,8 +2393,8 @@ msgstr "Ugyldig rabattype for promokode {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2402,8 +2402,8 @@ msgstr "" "ordre i applikationen, herunder dens forskellige attributter såsom " "fakturerings- og forsendelsesoplysninger, status, tilknyttet bruger, " "notifikationer og relaterede operationer. Ordrer kan have tilknyttede " -"produkter, kampagner kan anvendes, adresser kan indstilles, og forsendelses- " -"eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " +"produkter, kampagner kan anvendes, adresser kan indstilles, og forsendelses-" +" eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " "funktionaliteten håndtering af produkterne i ordrens livscyklus." #: engine/core/models.py:1213 @@ -2437,8 +2437,8 @@ msgstr "Bestillingsstatus" #: engine/core/models.py:1243 engine/core/models.py:1769 msgid "json structure of notifications to display to users" msgstr "" -"JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges " -"tabelvisningen" +"JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges" +" tabelvisningen" #: engine/core/models.py:1249 msgid "json representation of order attributes for this order" @@ -2492,7 +2492,8 @@ msgstr "Du kan ikke tilføje flere produkter, end der er på lager" #: engine/core/models.py:1428 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." +"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " +"ordre." #: engine/core/models.py:1416 #, python-brace-format @@ -2526,7 +2527,8 @@ msgstr "Du kan ikke købe en tom ordre!" #: engine/core/models.py:1522 msgid "you cannot buy an order without a user" msgstr "" -"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende ordre." +"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " +"ordre." #: engine/core/models.py:1536 msgid "a user without a balance cannot buy with balance" @@ -2575,9 +2577,11 @@ msgid "feedback comments" msgstr "Kommentarer til feedback" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" +"Henviser til det specifikke produkt i en ordre, som denne feedback handler " +"om" #: engine/core/models.py:1720 msgid "related order product" @@ -2604,8 +2608,8 @@ msgid "" "Product models and stores a reference to them." msgstr "" "Repræsenterer produkter forbundet med ordrer og deres attributter. " -"OrderProduct-modellen vedligeholder oplysninger om et produkt, der er en del " -"af en ordre, herunder detaljer som købspris, antal, produktattributter og " +"OrderProduct-modellen vedligeholder oplysninger om et produkt, der er en del" +" af en ordre, herunder detaljer som købspris, antal, produktattributter og " "status. Den administrerer notifikationer til brugeren og administratorer og " "håndterer operationer som f.eks. at returnere produktsaldoen eller tilføje " "feedback. Modellen indeholder også metoder og egenskaber, der understøtter " @@ -2681,7 +2685,8 @@ msgstr "Forkert handling angivet for feedback: {action}!" #: engine/core/models.py:1888 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." +"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " +"ordre." #: engine/core/models.py:1894 msgid "name" @@ -2720,9 +2725,9 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Repræsenterer downloadfunktionen for digitale aktiver, der er forbundet med " "ordrer. DigitalAssetDownload-klassen giver mulighed for at administrere og " @@ -2788,8 +2793,7 @@ msgstr "Hej %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Tak for din ordre #%(order.pk)s! Vi er glade for at kunne informere dig om, " @@ -2903,8 +2907,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Tak for din bestilling! Vi er glade for at kunne bekræfte dit køb. Nedenfor " @@ -2945,23 +2948,23 @@ msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | kontakt os påbegyndt" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | kontakt os indledt" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Ordrebekræftelse" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | ordrebekræftelse" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Order Delivered" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order delivered" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promokode givet" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promokode givet" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2975,7 +2978,8 @@ msgstr "Parameteren NOMINATIM_URL skal være konfigureret!" #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -"Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} pixels." +"Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} " +"pixels." #: engine/core/views.py:73 msgid "" @@ -3036,14 +3040,10 @@ msgstr "Håndterer logikken i at købe som en virksomhed uden registrering." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Håndterer download af et digitalt aktiv, der er knyttet til en ordre.\n" -"Denne funktion forsøger at betjene den digitale aktivfil, der ligger i " -"projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som " -"tegn på, at ressourcen ikke er tilgængelig." +"Denne funktion forsøger at betjene den digitale aktivfil, der ligger i projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som tegn på, at ressourcen ikke er tilgængelig." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3072,19 +3072,15 @@ msgstr "Favicon ikke fundet" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Håndterer anmodninger om et websteds favicon.\n" -"Denne funktion forsøger at servere favicon-filen, der ligger i projektets " -"statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for " -"at angive, at ressourcen ikke er tilgængelig." +"Denne funktion forsøger at servere favicon-filen, der ligger i projektets statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for at angive, at ressourcen ikke er tilgængelig." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Omdirigerer anmodningen til administratorens indeksside. Funktionen " @@ -3096,7 +3092,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Returnerer den aktuelle version af eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3110,12 +3106,13 @@ msgstr "" "understøttelse af dynamiske serializer-klasser baseret på den aktuelle " "handling, tilladelser, der kan tilpasses, og gengivelsesformater." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Repræsenterer et visningssæt til håndtering af AttributeGroup-objekter. " "Håndterer operationer relateret til AttributeGroup, herunder filtrering, " @@ -3123,7 +3120,7 @@ msgstr "" "API-lag og giver en standardiseret måde at behandle anmodninger og svar for " "AttributeGroup-data på." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3139,21 +3136,21 @@ msgstr "" "data, f.eks. filtrering efter specifikke felter eller hentning af " "detaljerede eller forenklede oplysninger afhængigt af anmodningen." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"Et visningssæt til håndtering af AttributeValue-objekter. Dette viewet giver " -"funktionalitet til at liste, hente, oprette, opdatere og slette " +"Et visningssæt til håndtering af AttributeValue-objekter. Dette viewet giver" +" funktionalitet til at liste, hente, oprette, opdatere og slette " "AttributeValue-objekter. Det integreres med Django REST Framework's viewset-" "mekanismer og bruger passende serializers til forskellige handlinger. " "Filtreringsfunktioner leveres gennem DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3167,19 +3164,19 @@ msgstr "" "serialisering af kategoridata. ViewSet håndhæver også tilladelser for at " "sikre, at kun autoriserede brugere kan få adgang til specifikke data." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." msgstr "" -"Repræsenterer et visningssæt til håndtering af Brand-instanser. Denne klasse " -"giver funktionalitet til at forespørge, filtrere og serialisere Brand-" +"Repræsenterer et visningssæt til håndtering af Brand-instanser. Denne klasse" +" giver funktionalitet til at forespørge, filtrere og serialisere Brand-" "objekter. Den bruger Djangos ViewSet-rammeværk til at forenkle " "implementeringen af API-slutpunkter for Brand-objekter." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3192,12 +3189,12 @@ msgstr "" "Håndterer operationer relateret til `Product`-modellen i systemet. Denne " "klasse giver et visningssæt til håndtering af produkter, herunder deres " "filtrering, serialisering og operationer på specifikke forekomster. Den " -"udvider fra `EvibesViewSet` for at bruge fælles funktionalitet og integrerer " -"med Django REST-frameworket til RESTful API-operationer. Indeholder metoder " -"til at hente produktoplysninger, anvende tilladelser og få adgang til " +"udvider fra `EvibesViewSet` for at bruge fælles funktionalitet og integrerer" +" med Django REST-frameworket til RESTful API-operationer. Indeholder metoder" +" til at hente produktoplysninger, anvende tilladelser og få adgang til " "relateret feedback om et produkt." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3205,69 +3202,69 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"Repræsenterer et visningssæt til håndtering af Vendor-objekter. Dette viewet " -"gør det muligt at hente, filtrere og serialisere Vendor-data. Det definerer " -"queryset, filterkonfigurationer og serializer-klasser, der bruges til at " +"Repræsenterer et visningssæt til håndtering af Vendor-objekter. Dette viewet" +" gør det muligt at hente, filtrere og serialisere Vendor-data. Det definerer" +" queryset, filterkonfigurationer og serializer-klasser, der bruges til at " "håndtere forskellige handlinger. Formålet med denne klasse er at give " "strømlinet adgang til Vendor-relaterede ressourcer gennem Django REST-" "frameworket." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Repræsentation af et visningssæt, der håndterer feedback-objekter. Denne " -"klasse håndterer handlinger relateret til feedback-objekter, herunder liste, " -"filtrering og hentning af detaljer. Formålet med dette visningssæt er at " +"klasse håndterer handlinger relateret til feedback-objekter, herunder liste," +" filtrering og hentning af detaljer. Formålet med dette visningssæt er at " "levere forskellige serializers til forskellige handlinger og implementere " -"tilladelsesbaseret håndtering af tilgængelige feedback-objekter. Det udvider " -"basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at " +"tilladelsesbaseret håndtering af tilgængelige feedback-objekter. Det udvider" +" basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at " "forespørge på data." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet til håndtering af ordrer og relaterede operationer. Denne klasse " -"indeholder funktionalitet til at hente, ændre og administrere ordreobjekter. " -"Den indeholder forskellige endpoints til håndtering af ordreoperationer " +"indeholder funktionalitet til at hente, ændre og administrere ordreobjekter." +" Den indeholder forskellige endpoints til håndtering af ordreoperationer " "såsom tilføjelse eller fjernelse af produkter, udførelse af køb for " "registrerede såvel som uregistrerede brugere og hentning af den aktuelle " "godkendte brugers afventende ordrer. ViewSet bruger flere serializers " "baseret på den specifikke handling, der udføres, og håndhæver tilladelser i " "overensstemmelse hermed, mens der interageres med ordredata." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Indeholder et visningssæt til håndtering af OrderProduct-enheder. Dette " -"visningssæt muliggør CRUD-operationer og brugerdefinerede handlinger, der er " -"specifikke for OrderProduct-modellen. Det omfatter filtrering, kontrol af " +"visningssæt muliggør CRUD-operationer og brugerdefinerede handlinger, der er" +" specifikke for OrderProduct-modellen. Det omfatter filtrering, kontrol af " "tilladelser og skift af serializer baseret på den ønskede handling. " "Derudover indeholder det en detaljeret handling til håndtering af feedback " "på OrderProduct-instanser." -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Håndterer operationer relateret til produktbilleder i applikationen." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3275,20 +3272,20 @@ msgstr "" "Administrerer hentning og håndtering af PromoCode-instanser gennem " "forskellige API-handlinger." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Repræsenterer et visningssæt til håndtering af kampagner." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operationer relateret til lagerdata i systemet." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3301,7 +3298,7 @@ msgstr "" "integreret for at sikre, at brugere kun kan administrere deres egne " "ønskelister, medmindre der er givet eksplicitte tilladelser." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3309,18 +3306,18 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"Denne klasse giver viewset-funktionalitet til håndtering af `Address`-" -"objekter. AddressViewSet-klassen muliggør CRUD-operationer, filtrering og " -"brugerdefinerede handlinger relateret til adresseenheder. Den omfatter " -"specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse af " -"serializer og håndtering af tilladelser baseret på anmodningskonteksten." +"Denne klasse giver viewset-funktionalitet til håndtering af " +"`Address`-objekter. AddressViewSet-klassen muliggør CRUD-operationer, " +"filtrering og brugerdefinerede handlinger relateret til adresseenheder. Den " +"omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse " +"af serializer og håndtering af tilladelser baseret på anmodningskonteksten." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.mo b/engine/core/locale/de_DE/LC_MESSAGES/django.mo index 7a6fc8d62dbaa3bdddad138f1ea495a94ebd8fb3..0d6dcfb2ea5a5a04cfaf0d93182c3158cb75705a 100644 GIT binary patch delta 5485 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 delta 5455 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Ist aktiv" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Wenn auf false gesetzt, kann dieses Objekt von Benutzern ohne die " "erforderliche Berechtigung nicht gesehen werden." @@ -50,89 +51,89 @@ msgstr "Geändert" msgid "when the object was last modified" msgstr "Wann das Objekt zuletzt bearbeitet wurde" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Übersetzungen" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Allgemein" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Beziehungen" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "Zusatzinfo" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadaten" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Zeitstempel" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s aktivieren" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Ausgewählte Artikel wurden aktiviert!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Ausgewählte Artikel wurden deaktiviert!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Attribut Wert" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Attribut Werte" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Bild" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Bilder" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Lagerbestand" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Bestände" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Produkt bestellen" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Produkte bestellen" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Kinder" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfigurieren Sie" @@ -156,7 +157,8 @@ msgstr "Geliefert" msgid "canceled" msgstr "Abgesagt" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Gescheitert" @@ -198,7 +200,7 @@ msgstr "" "ausgewählt werden. Die Sprache kann sowohl mit Accept-Language als auch mit " "Query-Parameter ausgewählt werden." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -207,10 +209,8 @@ msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -"Wenden Sie nur einen Schlüssel an, um erlaubte Daten aus dem Cache zu " -"lesen.\n" -"Schlüssel, Daten und Timeout mit Authentifizierung anwenden, um Daten in den " -"Cache zu schreiben." +"Wenden Sie nur einen Schlüssel an, um erlaubte Daten aus dem Cache zu lesen.\n" +"Schlüssel, Daten und Timeout mit Authentifizierung anwenden, um Daten in den Cache zu schreiben." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -224,7 +224,7 @@ msgstr "Abrufen der exponierbaren Parameter der Anwendung" msgid "send a message to the support team" msgstr "Senden Sie eine Nachricht an das Support-Team" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Fordern Sie eine CORS-gesicherte URL an. Nur https erlaubt." @@ -276,7 +276,8 @@ msgstr "" "Editierbarkeit" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Attributgruppe, wobei nicht " "editierbare Felder gespeichert werden" @@ -306,8 +307,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:141 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:151 msgid "list all attribute values (simple view)" @@ -332,7 +333,8 @@ msgstr "" "Editierbarkeit" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Umschreiben einiger Felder eines vorhandenen Attributwerts, wobei nicht " "bearbeitbare Daten gespeichert werden" @@ -365,14 +367,14 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO-Meta-Schnappschuss" @@ -391,12 +393,12 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Groß- und Kleinschreibung unempfindliche Teilstringsuche über " -"human_readable_id, order_products.product.name und order_products.product." -"partnumber" +"human_readable_id, order_products.product.name und " +"order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -432,9 +434,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Sortierung nach einem von: uuid, human_readable_id, user_email, user, " "status, created, modified, buy_time, random. Präfix mit '-' für absteigend " @@ -468,8 +470,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:373 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:380 msgid "purchase an order" @@ -495,14 +497,15 @@ msgstr "" "ruft eine aktuelle ausstehende Bestellung eines authentifizierten Benutzers " "ab" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "eine Bestellung kaufen, ohne ein Konto anzulegen" #: engine/core/docs/drf/viewsets.py:409 msgid "finalizes the order purchase for a non-registered user." msgstr "" -"schließt den Kauf einer Bestellung für einen nicht registrierten Benutzer ab." +"schließt den Kauf einer Bestellung für einen nicht registrierten Benutzer " +"ab." #: engine/core/docs/drf/viewsets.py:420 msgid "add product to order" @@ -519,8 +522,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:429 msgid "add a list of products to order, quantities will not count" msgstr "" -"Fügen Sie eine Liste der zu bestellenden Produkte hinzu, Mengen werden nicht " -"gezählt" +"Fügen Sie eine Liste der zu bestellenden Produkte hinzu, Mengen werden nicht" +" gezählt" #: engine/core/docs/drf/viewsets.py:430 msgid "" @@ -589,8 +592,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:496 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:503 msgid "retrieve current pending wishlist of a user" @@ -599,8 +602,8 @@ msgstr "Abruf der aktuellen Wunschliste eines Benutzers" #: engine/core/docs/drf/viewsets.py:504 msgid "retrieves a current pending wishlist of an authenticated user" msgstr "" -"ruft eine aktuelle ausstehende Wunschliste eines authentifizierten Benutzers " -"ab" +"ruft eine aktuelle ausstehende Wunschliste eines authentifizierten Benutzers" +" ab" #: engine/core/docs/drf/viewsets.py:514 msgid "add product to wishlist" @@ -647,29 +650,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtern Sie nach einem oder mehreren Attributnamen/Wertpaaren. \n" "- **Syntax**: `attr_name=Methode-Wert[;attr2=Methode2-Wert2]...`\n" -"- **Methoden** (Standardwert ist \"icontains\", wenn nicht angegeben): " -"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, " -"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, " -"`gt`, `gte`, `in`\n" -"- **Wert-Typisierung**: JSON wird zuerst versucht (damit man Listen/Dicts " -"übergeben kann), `true`/`false` für Booleans, Integers, Floats; ansonsten " -"als String behandelt. \n" -"- Base64**: Präfix \"b64-\" für URL-sichere Base64-Kodierung des " -"Rohwertes. \n" +"- **Methoden** (Standardwert ist \"icontains\", wenn nicht angegeben): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- **Wert-Typisierung**: JSON wird zuerst versucht (damit man Listen/Dicts übergeben kann), `true`/`false` für Booleans, Integers, Floats; ansonsten als String behandelt. \n" +"- Base64**: Präfix \"b64-\" für URL-sichere Base64-Kodierung des Rohwertes. \n" "Beispiele: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -684,12 +676,10 @@ msgstr "(genaue) Produkt-UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Durch Kommata getrennte Liste der Felder, nach denen sortiert werden soll. " -"Präfix mit \"-\" für absteigend. \n" +"Durch Kommata getrennte Liste der Felder, nach denen sortiert werden soll. Präfix mit \"-\" für absteigend. \n" "**Erlaubt:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -703,14 +693,17 @@ msgid "Product UUID or slug" msgstr "Produkt UUID oder Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Ein Produkt erstellen" #: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -"Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer " -"Felder" +"Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer" +" Felder" #: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648 msgid "" @@ -762,10 +755,10 @@ msgstr "Autovervollständigung der Adresseingabe" #: engine/core/docs/drf/viewsets.py:794 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -"docker compose exec app poetry run python manage.py deepl_translate -l en-gb " -"-l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " -"it-it -l ja-jp -l kk-kz -l nl-nl -l pl -l pt-br -l ro-ro -l ru-ru -l zh-hans " -"-a core -a geo -a payments -a vibes_auth -a blog" +"docker compose exec app poetry run python manage.py deepl_translate -l en-gb" +" -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " +"it-it -l ja-jp -l kk-kz -l nl-nl -l pl -l pt-br -l ro-ro -l ru-ru -l zh-hans" +" -a core -a geo -a payments -a vibes_auth -a blog" #: engine/core/docs/drf/viewsets.py:800 msgid "limit the results amount, 1 < limit < 10, default: 5" @@ -795,8 +788,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:851 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:861 msgid "list all order–product relations (simple view)" @@ -855,8 +848,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:981 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:1006 msgid "list all vendors (simple view)" @@ -882,8 +875,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1041 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:1051 msgid "list all product images (simple view)" @@ -909,8 +902,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1086 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:1096 msgid "list all promo codes (simple view)" @@ -936,8 +929,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1131 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:1141 msgid "list all promotions (simple view)" @@ -963,8 +956,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:1186 msgid "list all stocks (simple view)" @@ -990,8 +983,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1221 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/docs/drf/viewsets.py:1231 msgid "list all product tags (simple view)" @@ -1017,8 +1010,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" +"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" +" Daten zu speichern" #: engine/core/elasticsearch/__init__.py:122 #: engine/core/elasticsearch/__init__.py:570 @@ -1101,8 +1094,8 @@ msgstr "SKU" #: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -"Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories " -"zu verwenden" +"Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories" +" zu verwenden" #: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" @@ -1150,252 +1143,255 @@ msgstr "Ebene" msgid "Product UUID" msgstr "Produkt UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Schlüssel, der im Cache zu suchen oder in den Cache zu legen ist" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Im Cache zu speichernde Daten" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in Sekunden, um die Daten in den Cache zu stellen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Zwischengespeicherte Daten" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-Daten aus der angeforderten URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Auftrag {order_uuid} nicht gefunden!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Alle Produkte aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Eine Bestellung kaufen" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Bitte geben Sie entweder order_uuid oder order_hr_id an - beide schließen " "sich gegenseitig aus!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Eine Aktion für eine Liste von Produkten in der Bestellung ausführen" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Entfernen/Hinzufügen" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Aktion muss entweder \"Hinzufügen\" oder \"Entfernen\" sein!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" -msgstr "Ausführen einer Aktion für eine Liste von Produkten in der Wunschliste" +msgstr "" +"Ausführen einer Aktion für eine Liste von Produkten in der Wunschliste" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Bitte geben Sie den Wert `wishlist_uuid` an." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nicht gefunden!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Eine Bestellung kaufen" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Bitte senden Sie die Attribute als String im Format attr1=wert1,attr2=wert2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Aktion muss entweder `Add` oder `remove` sein!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestellprodukt {order_product_uuid} nicht gefunden!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Vom Benutzer angegebene Originaladresse" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Der Grenzwert muss zwischen 1 und 10 liegen." -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funktioniert wie ein Zauber" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Attribute" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Gruppierte Attribute" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Gruppen von Attributen" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategorien" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Marken" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorien" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Welche Attribute und Werte können für die Filterung dieser Kategorie " "verwendet werden." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" -"Mindest- und Höchstpreise für Produkte in dieser Kategorie, sofern verfügbar." +"Mindest- und Höchstpreise für Produkte in dieser Kategorie, sofern " +"verfügbar." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags für diese Kategorie" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkte in dieser Kategorie" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Anbieter" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breitengrad (Y-Koordinate)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Längengrad (X-Koordinate)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Wie" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Bewertungswert von 1 bis einschließlich 10 oder 0, wenn nicht festgelegt." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Stellt das Feedback eines Benutzers dar." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Benachrichtigungen" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Rückmeldung" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Rechnungsadresse" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1403,53 +1399,53 @@ msgstr "" "Lieferadresse für diese Bestellung, leer lassen, wenn sie mit der " "Rechnungsadresse übereinstimmt oder nicht zutrifft" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Gesamtpreis für diese Bestellung" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Gesamtmenge der bestellten Produkte" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Sind alle Produkte in der Bestellung digital" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Vorgänge für diesen Auftrag" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Bestellungen" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Bild URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Bilder des Produkts" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Rückmeldungen" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Marke" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribut-Gruppen" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1457,7 +1453,7 @@ msgstr "Attribut-Gruppen" msgid "price" msgstr "Preis" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1465,39 +1461,39 @@ msgstr "Preis" msgid "quantity" msgstr "Menge" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Anzahl der Rückmeldungen" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkte nur für persönliche Bestellungen verfügbar" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Rabattierter Preis" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produkte" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Werbeaktionen" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Anbieter" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1505,99 +1501,99 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Wunschzettel" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Markierte Produkte" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Produkt-Tags" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Markierte Kategorien" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategorien'-Tags" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Name des Projekts" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Name des Unternehmens" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Adresse des Unternehmens" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Telefonnummer des Unternehmens" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "E-Mail von\", muss manchmal anstelle des Host-Benutzerwerts verwendet werden" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "E-Mail-Host-Benutzer" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Höchstbetrag für die Zahlung" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Mindestbetrag für die Zahlung" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analytische Daten" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfiguration" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Sprachcode" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Name der Sprache" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Sprachflagge, falls vorhanden :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Eine Liste der unterstützten Sprachen abrufen" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Suchergebnisse für Produkte" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Suchergebnisse für Produkte" @@ -1608,11 +1604,11 @@ msgid "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." msgstr "" -"Stellt eine Gruppe von Attributen dar, die hierarchisch aufgebaut sein kann. " -"Diese Klasse wird verwendet, um Attributgruppen zu verwalten und zu " +"Stellt eine Gruppe von Attributen dar, die hierarchisch aufgebaut sein kann." +" Diese Klasse wird verwendet, um Attributgruppen zu verwalten und zu " "organisieren. Eine Attributgruppe kann eine übergeordnete Gruppe haben, die " -"eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in " -"einem komplexen System effektiver zu kategorisieren und zu verwalten." +"eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in" +" einem komplexen System effektiver zu kategorisieren und zu verwalten." #: engine/core/models.py:91 msgid "parent of this group" @@ -1642,9 +1638,9 @@ msgid "" msgstr "" "Stellt eine Verkäuferentität dar, die Informationen über externe Verkäufer " "und deren Interaktionsanforderungen speichern kann. Die Klasse Vendor wird " -"zur Definition und Verwaltung von Informationen über einen externen Anbieter " -"verwendet. Sie speichert den Namen des Anbieters, die für die Kommunikation " -"erforderlichen Authentifizierungsdaten und den prozentualen Aufschlag, der " +"zur Definition und Verwaltung von Informationen über einen externen Anbieter" +" verwendet. Sie speichert den Namen des Anbieters, die für die Kommunikation" +" erforderlichen Authentifizierungsdaten und den prozentualen Aufschlag, der " "auf die vom Anbieter abgerufenen Produkte angewendet wird. Dieses Modell " "verwaltet auch zusätzliche Metadaten und Einschränkungen, wodurch es sich " "für die Verwendung in Systemen eignet, die mit Drittanbietern interagieren." @@ -1701,10 +1697,10 @@ msgid "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." msgstr "" -"Stellt ein Produkt-Tag dar, das zur Klassifizierung oder Identifizierung von " -"Produkten verwendet wird. Die Klasse ProductTag dient der eindeutigen " -"Identifizierung und Klassifizierung von Produkten durch eine Kombination aus " -"einem internen Tag-Bezeichner und einem benutzerfreundlichen Anzeigenamen. " +"Stellt ein Produkt-Tag dar, das zur Klassifizierung oder Identifizierung von" +" Produkten verwendet wird. Die Klasse ProductTag dient der eindeutigen " +"Identifizierung und Klassifizierung von Produkten durch eine Kombination aus" +" einem internen Tag-Bezeichner und einem benutzerfreundlichen Anzeigenamen. " "Sie unterstützt Operationen, die über Mixins exportiert werden, und " "ermöglicht die Anpassung von Metadaten für Verwaltungszwecke." @@ -1765,9 +1761,9 @@ msgstr "" "Beziehungen unterstützen. Die Klasse enthält Felder für Metadaten und " "visuelle Darstellung, die als Grundlage für kategoriebezogene Funktionen " "dienen. Diese Klasse wird in der Regel verwendet, um Produktkategorien oder " -"andere ähnliche Gruppierungen innerhalb einer Anwendung zu definieren und zu " -"verwalten. Sie ermöglicht es Benutzern oder Administratoren, den Namen, die " -"Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute " +"andere ähnliche Gruppierungen innerhalb einer Anwendung zu definieren und zu" +" verwalten. Sie ermöglicht es Benutzern oder Administratoren, den Namen, die" +" Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute " "wie Bilder, Tags oder Priorität zuzuweisen." #: engine/core/models.py:274 @@ -1821,7 +1817,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Stellt ein Markenobjekt im System dar. Diese Klasse verwaltet Informationen " "und Attribute in Bezug auf eine Marke, einschließlich ihres Namens, Logos, " @@ -1872,16 +1869,16 @@ msgstr "Kategorien" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" "Stellt den Bestand eines im System verwalteten Produkts dar. Diese Klasse " -"liefert Details über die Beziehung zwischen Lieferanten, Produkten und deren " -"Bestandsinformationen sowie bestandsbezogene Eigenschaften wie Preis, " +"liefert Details über die Beziehung zwischen Lieferanten, Produkten und deren" +" Bestandsinformationen sowie bestandsbezogene Eigenschaften wie Preis, " "Einkaufspreis, Menge, SKU und digitale Assets. Sie ist Teil des " "Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von " "verschiedenen Anbietern verfügbaren Produkte zu ermöglichen." @@ -1937,7 +1934,8 @@ msgstr "SKU des Verkäufers" #: engine/core/models.py:556 msgid "digital file associated with this stock if applicable" -msgstr "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" +msgstr "" +"Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" #: engine/core/models.py:557 msgid "digital file" @@ -1965,12 +1963,12 @@ msgstr "" "Stellt ein Produkt mit Attributen wie Kategorie, Marke, Tags, digitalem " "Status, Name, Beschreibung, Teilenummer und Slug dar. Bietet verwandte " "Hilfseigenschaften zum Abrufen von Bewertungen, Feedback-Zahlen, Preis, " -"Menge und Gesamtbestellungen. Konzipiert für die Verwendung in einem System, " -"das den elektronischen Handel oder die Bestandsverwaltung verwaltet. Diese " +"Menge und Gesamtbestellungen. Konzipiert für die Verwendung in einem System," +" das den elektronischen Handel oder die Bestandsverwaltung verwaltet. Diese " "Klasse interagiert mit verwandten Modellen (wie Category, Brand und " -"ProductTag) und verwaltet die Zwischenspeicherung von Eigenschaften, auf die " -"häufig zugegriffen wird, um die Leistung zu verbessern. Sie wird verwendet, " -"um Produktdaten und die damit verbundenen Informationen innerhalb einer " +"ProductTag) und verwaltet die Zwischenspeicherung von Eigenschaften, auf die" +" häufig zugegriffen wird, um die Leistung zu verbessern. Sie wird verwendet," +" um Produktdaten und die damit verbundenen Informationen innerhalb einer " "Anwendung zu definieren und zu manipulieren." #: engine/core/models.py:585 @@ -1995,7 +1993,8 @@ msgstr "Ist das Produkt digital" #: engine/core/models.py:612 msgid "provide a clear identifying name for the product" -msgstr "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." +msgstr "" +"Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." #: engine/core/models.py:613 msgid "product name" @@ -2026,12 +2025,12 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"Stellt ein Attribut im System dar. Diese Klasse wird verwendet, um Attribute " -"zu definieren und zu verwalten. Dabei handelt es sich um anpassbare " +"Stellt ein Attribut im System dar. Diese Klasse wird verwendet, um Attribute" +" zu definieren und zu verwalten. Dabei handelt es sich um anpassbare " "Datenelemente, die mit anderen Entitäten verknüpft werden können. Attribute " "haben zugehörige Kategorien, Gruppen, Werttypen und Namen. Das Modell " "unterstützt mehrere Wertetypen, darunter String, Integer, Float, Boolean, " @@ -2099,9 +2098,9 @@ msgstr "Attribut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Stellt einen spezifischen Wert für ein Attribut dar, das mit einem Produkt " "verknüpft ist. Es verknüpft das \"Attribut\" mit einem eindeutigen \"Wert\" " @@ -2124,16 +2123,16 @@ msgstr "Der spezifische Wert für dieses Attribut" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Stellt ein Produktbild dar, das mit einem Produkt im System verbunden ist. " "Diese Klasse dient der Verwaltung von Bildern für Produkte, einschließlich " "der Funktionen zum Hochladen von Bilddateien, der Zuordnung zu bestimmten " -"Produkten und der Festlegung ihrer Anzeigereihenfolge. Sie enthält auch eine " -"Funktion zur Barrierefreiheit mit alternativem Text für die Bilder." +"Produkten und der Festlegung ihrer Anzeigereihenfolge. Sie enthält auch eine" +" Funktion zur Barrierefreiheit mit alternativem Text für die Bilder." #: engine/core/models.py:826 msgid "provide alternative text for the image for accessibility" @@ -2175,16 +2174,16 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"Repräsentiert eine Werbekampagne für Produkte mit einem Rabatt. Diese Klasse " -"wird verwendet, um Werbekampagnen zu definieren und zu verwalten, die einen " -"prozentualen Rabatt für Produkte anbieten. Die Klasse enthält Attribute zum " -"Festlegen des Rabattsatzes, zum Bereitstellen von Details über die " +"Repräsentiert eine Werbekampagne für Produkte mit einem Rabatt. Diese Klasse" +" wird verwendet, um Werbekampagnen zu definieren und zu verwalten, die einen" +" prozentualen Rabatt für Produkte anbieten. Die Klasse enthält Attribute zum" +" Festlegen des Rabattsatzes, zum Bereitstellen von Details über die " "Werbeaktion und zum Verknüpfen der Aktion mit den entsprechenden Produkten. " -"Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der " -"Kampagne zu bestimmen." +"Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der" +" Kampagne zu bestimmen." #: engine/core/models.py:880 msgid "percentage discount for the selected products" @@ -2228,8 +2227,8 @@ msgstr "" "Stellt die Wunschliste eines Benutzers zum Speichern und Verwalten " "gewünschter Produkte dar. Die Klasse bietet Funktionen zur Verwaltung einer " "Sammlung von Produkten und unterstützt Vorgänge wie das Hinzufügen und " -"Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte " -"gleichzeitig." +"Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte" +" gleichzeitig." #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2253,15 +2252,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Stellt einen dokumentarischen Datensatz dar, der an ein Produkt gebunden " "ist. Diese Klasse wird verwendet, um Informationen über Dokumentationen zu " "bestimmten Produkten zu speichern, einschließlich Datei-Uploads und deren " "Metadaten. Sie enthält Methoden und Eigenschaften zur Handhabung des " -"Dateityps und des Speicherpfads für die Dokumentationsdateien. Sie erweitert " -"die Funktionalität von bestimmten Mixins und bietet zusätzliche " +"Dateityps und des Speicherpfads für die Dokumentationsdateien. Sie erweitert" +" die Funktionalität von bestimmten Mixins und bietet zusätzliche " "benutzerdefinierte Funktionen." #: engine/core/models.py:998 @@ -2278,14 +2277,14 @@ msgstr "Ungelöst" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Stellt eine Adresseinheit dar, die Standortdetails und Assoziationen mit " "einem Benutzer enthält. Bietet Funktionen für die Speicherung von " @@ -2380,7 +2379,8 @@ msgstr "Kennung des Promo-Codes" #: engine/core/models.py:1095 msgid "fixed discount amount applied if percent is not used" msgstr "" -"Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet wird" +"Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " +"wird" #: engine/core/models.py:1096 msgid "fixed discount amount" @@ -2457,8 +2457,8 @@ msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2632,8 +2632,8 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" "Verwaltet Benutzerfeedback für Produkte. Diese Klasse dient der Erfassung " -"und Speicherung von Benutzerfeedback für bestimmte Produkte, die sie gekauft " -"haben. Sie enthält Attribute zum Speichern von Benutzerkommentaren, einen " +"und Speicherung von Benutzerfeedback für bestimmte Produkte, die sie gekauft" +" haben. Sie enthält Attribute zum Speichern von Benutzerkommentaren, einen " "Verweis auf das entsprechende Produkt in der Bestellung und eine vom " "Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um " "Feedbackdaten effektiv zu modellieren und zu verwalten." @@ -2647,10 +2647,11 @@ msgid "feedback comments" msgstr "Kommentare zum Feedback" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" +"Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese" +" Rückmeldung bezieht" #: engine/core/models.py:1720 msgid "related order product" @@ -2676,14 +2677,14 @@ msgid "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." msgstr "" -"Stellt die mit Bestellungen verbundenen Produkte und ihre Attribute dar. Das " -"OrderProduct-Modell verwaltet Informationen über ein Produkt, das Teil einer " -"Bestellung ist, einschließlich Details wie Kaufpreis, Menge, " +"Stellt die mit Bestellungen verbundenen Produkte und ihre Attribute dar. Das" +" OrderProduct-Modell verwaltet Informationen über ein Produkt, das Teil " +"einer Bestellung ist, einschließlich Details wie Kaufpreis, Menge, " "Produktattribute und Status. Es verwaltet Benachrichtigungen für Benutzer " "und Administratoren und führt Vorgänge wie die Rückgabe des Produktsaldos " "oder das Hinzufügen von Feedback durch. Dieses Modell bietet auch Methoden " -"und Eigenschaften, die die Geschäftslogik unterstützen, z. B. die Berechnung " -"des Gesamtpreises oder die Generierung einer Download-URL für digitale " +"und Eigenschaften, die die Geschäftslogik unterstützen, z. B. die Berechnung" +" des Gesamtpreises oder die Generierung einer Download-URL für digitale " "Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " "integriert und speichert einen Verweis auf diese." @@ -2797,16 +2798,16 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Stellt die Download-Funktionalität für digitale Assets in Verbindung mit " "Bestellungen dar. Die Klasse DigitalAssetDownload ermöglicht die Verwaltung " "und den Zugriff auf Downloads im Zusammenhang mit Auftragsprodukten. Sie " "verwaltet Informationen über das zugehörige Auftragsprodukt, die Anzahl der " -"Downloads und ob das Asset öffentlich sichtbar ist. Sie enthält eine Methode " -"zur Generierung einer URL für das Herunterladen des Assets, wenn sich die " +"Downloads und ob das Asset öffentlich sichtbar ist. Sie enthält eine Methode" +" zur Generierung einer URL für das Herunterladen des Assets, wenn sich die " "zugehörige Bestellung in einem abgeschlossenen Status befindet." #: engine/core/models.py:1961 @@ -2865,8 +2866,7 @@ msgstr "Hallo %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Vielen Dank für Ihre Bestellung #%(order.pk)s! Wir freuen uns, Ihnen " @@ -2981,8 +2981,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Vielen Dank für Ihre Bestellung! Wir freuen uns, Ihren Kauf zu bestätigen. " @@ -3019,27 +3018,28 @@ msgstr "Sowohl Daten als auch Timeout sind erforderlich" #: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen" +msgstr "" +"Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Kontakt eingeleitet" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | Kontakt eingeleitet" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Auftragsbestätigung" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | Auftragsbestätigung" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Bestellung ausgeliefert" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | Bestellung geliefert" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | Promocode gewährt" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | Promocode gewährt" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3117,16 +3117,10 @@ msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" -"Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag " -"verbunden ist.\n" -"Diese Funktion versucht, die Datei des digitalen Assets, die sich im " -"Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei " -"nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass " -"die Ressource nicht verfügbar ist." +"Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag verbunden ist.\n" +"Diese Funktion versucht, die Datei des digitalen Assets, die sich im Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass die Ressource nicht verfügbar ist." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3143,7 +3137,8 @@ msgstr "Sie können das digitale Asset nur einmal herunterladen" #: engine/core/views.py:338 msgid "the order must be paid before downloading the digital asset" msgstr "" -"die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt werden" +"die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt " +"werden" #: engine/core/views.py:344 msgid "the order product does not have a product" @@ -3156,20 +3151,15 @@ msgstr "Favicon nicht gefunden" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Bearbeitet Anfragen nach dem Favicon einer Website.\n" -"Diese Funktion versucht, die Favicon-Datei, die sich im statischen " -"Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei " -"nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, " -"dass die Ressource nicht verfügbar ist." +"Diese Funktion versucht, die Favicon-Datei, die sich im statischen Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, dass die Ressource nicht verfügbar ist." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Leitet die Anfrage auf die Admin-Indexseite um. Die Funktion verarbeitet " @@ -3181,7 +3171,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Gibt die aktuelle Version von eVibes zurück." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3190,25 +3180,26 @@ msgid "" "and rendering formats." msgstr "" "Definiert ein Viewset für die Verwaltung von Evibes-bezogenen Operationen. " -"Die Klasse EvibesViewSet erbt von ModelViewSet und bietet Funktionalität für " -"die Handhabung von Aktionen und Operationen auf Evibes-Entitäten. Sie " +"Die Klasse EvibesViewSet erbt von ModelViewSet und bietet Funktionalität für" +" die Handhabung von Aktionen und Operationen auf Evibes-Entitäten. Sie " "enthält Unterstützung für dynamische Serialisiererklassen auf der Grundlage " "der aktuellen Aktion, anpassbare Berechtigungen und Rendering-Formate." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Stellt ein Viewset für die Verwaltung von AttributeGroup-Objekten dar. " "Bearbeitet Vorgänge im Zusammenhang mit AttributeGroup, einschließlich " -"Filterung, Serialisierung und Abruf von Daten. Diese Klasse ist Teil der API-" -"Schicht der Anwendung und bietet eine standardisierte Methode zur " +"Filterung, Serialisierung und Abruf von Daten. Diese Klasse ist Teil der " +"API-Schicht der Anwendung und bietet eine standardisierte Methode zur " "Verarbeitung von Anfragen und Antworten für AttributeGroup-Daten." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3225,22 +3216,22 @@ msgstr "" "oder das Abrufen detaillierter bzw. vereinfachter Informationen je nach " "Anfrage." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Ein Viewset für die Verwaltung von AttributeValue-Objekten. Dieses Viewset " "bietet Funktionen zum Auflisten, Abrufen, Erstellen, Aktualisieren und " "Löschen von AttributeValue-Objekten. Es integriert sich in die Viewset-" -"Mechanismen des Django REST Frameworks und verwendet geeignete Serialisierer " -"für verschiedene Aktionen. Filterfunktionen werden über das " +"Mechanismen des Django REST Frameworks und verwendet geeignete Serialisierer" +" für verschiedene Aktionen. Filterfunktionen werden über das " "DjangoFilterBackend bereitgestellt." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3249,13 +3240,13 @@ msgid "" "can access specific data." msgstr "" "Verwaltet Ansichten für kategoriebezogene Operationen. Die Klasse " -"CategoryViewSet ist für die Handhabung von Vorgängen im Zusammenhang mit dem " -"Kategoriemodell im System verantwortlich. Sie unterstützt das Abrufen, " +"CategoryViewSet ist für die Handhabung von Vorgängen im Zusammenhang mit dem" +" Kategoriemodell im System verantwortlich. Sie unterstützt das Abrufen, " "Filtern und Serialisieren von Kategoriedaten. Das Viewset erzwingt auch " "Berechtigungen, um sicherzustellen, dass nur autorisierte Benutzer auf " "bestimmte Daten zugreifen können." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3267,7 +3258,7 @@ msgstr "" "Objekten. Sie verwendet das ViewSet-Framework von Django, um die " "Implementierung von API-Endpunkten für Brand-Objekte zu vereinfachen." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3279,14 +3270,14 @@ msgid "" msgstr "" "Verwaltet Vorgänge im Zusammenhang mit dem Modell \"Produkt\" im System. " "Diese Klasse bietet ein Viewset für die Verwaltung von Produkten, " -"einschließlich ihrer Filterung, Serialisierung und Operationen für bestimmte " -"Instanzen. Sie ist eine Erweiterung von `EvibesViewSet`, um gemeinsame " +"einschließlich ihrer Filterung, Serialisierung und Operationen für bestimmte" +" Instanzen. Sie ist eine Erweiterung von `EvibesViewSet`, um gemeinsame " "Funktionen zu nutzen und integriert sich in das Django REST Framework für " "RESTful API Operationen. Enthält Methoden zum Abrufen von Produktdetails, " "zur Anwendung von Berechtigungen und zum Zugriff auf zugehörige " "Rückmeldungen zu einem Produkt." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3301,64 +3292,64 @@ msgstr "" "dieser Klasse ist die Bereitstellung eines optimierten Zugriffs auf Vendor-" "Ressourcen über das Django REST-Framework." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Darstellung eines View-Sets, das Feedback-Objekte behandelt. Diese Klasse " "verwaltet Vorgänge im Zusammenhang mit Feedback-Objekten, einschließlich " "Auflistung, Filterung und Abruf von Details. Der Zweck dieses ViewSets ist " -"es, verschiedene Serialisierer für verschiedene Aktionen bereitzustellen und " -"eine erlaubnisbasierte Handhabung von zugänglichen Feedback-Objekten zu " +"es, verschiedene Serialisierer für verschiedene Aktionen bereitzustellen und" +" eine erlaubnisbasierte Handhabung von zugänglichen Feedback-Objekten zu " "implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das " "Filtersystem von Django zur Abfrage von Daten." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" -"ViewSet zur Verwaltung von Aufträgen und zugehörigen Vorgängen. Diese Klasse " -"bietet Funktionen zum Abrufen, Ändern und Verwalten von Bestellobjekten. Sie " -"enthält verschiedene Endpunkte für die Handhabung von Bestellvorgängen wie " -"das Hinzufügen oder Entfernen von Produkten, die Durchführung von Käufen für " -"registrierte und nicht registrierte Benutzer und das Abrufen der " +"ViewSet zur Verwaltung von Aufträgen und zugehörigen Vorgängen. Diese Klasse" +" bietet Funktionen zum Abrufen, Ändern und Verwalten von Bestellobjekten. " +"Sie enthält verschiedene Endpunkte für die Handhabung von Bestellvorgängen " +"wie das Hinzufügen oder Entfernen von Produkten, die Durchführung von Käufen" +" für registrierte und nicht registrierte Benutzer und das Abrufen der " "ausstehenden Bestellungen des aktuell authentifizierten Benutzers. Das " "ViewSet verwendet mehrere Serialisierer, die auf der spezifischen Aktion " "basieren, die durchgeführt wird, und erzwingt die entsprechenden " "Berechtigungen, während es mit den Bestelldaten interagiert." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Bietet ein Viewset für die Verwaltung von OrderProduct-Entitäten. Dieses " "Viewset ermöglicht CRUD-Vorgänge und benutzerdefinierte Aktionen speziell " "für das OrderProduct-Modell. Es umfasst Filterung, Berechtigungsprüfungen " "und Serializer-Umschaltung auf der Grundlage der angeforderten Aktion. " -"Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback " -"zu OrderProduct-Instanzen" +"Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback" +" zu OrderProduct-Instanzen" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" "Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3366,34 +3357,34 @@ msgstr "" "Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " "verschiedene API-Aktionen." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" "ViewSet für die Verwaltung von Wishlist-Vorgängen. Das WishlistViewSet " -"bietet Endpunkte für die Interaktion mit der Wunschliste eines Benutzers und " -"ermöglicht das Abrufen, Ändern und Anpassen von Produkten innerhalb der " +"bietet Endpunkte für die Interaktion mit der Wunschliste eines Benutzers und" +" ermöglicht das Abrufen, Ändern und Anpassen von Produkten innerhalb der " "Wunschliste. Dieses ViewSet erleichtert Funktionen wie das Hinzufügen, " "Entfernen und Massenaktionen für Produkte auf der Wunschliste. " "Berechtigungsprüfungen sind integriert, um sicherzustellen, dass Benutzer " "nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten " "Berechtigungen erteilt wurden." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3402,18 +3393,18 @@ msgid "" "on the request context." msgstr "" "Diese Klasse bietet Viewset-Funktionalität für die Verwaltung von " -"\"Address\"-Objekten. Die Klasse AddressViewSet ermöglicht CRUD-Operationen, " -"Filterung und benutzerdefinierte Aktionen im Zusammenhang mit " +"\"Address\"-Objekten. Die Klasse AddressViewSet ermöglicht CRUD-Operationen," +" Filterung und benutzerdefinierte Aktionen im Zusammenhang mit " "Adressentitäten. Sie umfasst spezielle Verhaltensweisen für verschiedene " "HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von " "Berechtigungen auf der Grundlage des Anfragekontexts." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocodierungsfehler: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3424,6 +3415,6 @@ msgstr "" "Bearbeitet Vorgänge im Zusammenhang mit Produkt-Tags innerhalb der " "Anwendung. Diese Klasse bietet Funktionen zum Abrufen, Filtern und " "Serialisieren von Produkt-Tag-Objekten. Sie unterstützt die flexible " -"Filterung nach bestimmten Attributen unter Verwendung des angegebenen Filter-" -"Backends und verwendet dynamisch verschiedene Serialisierer auf der " +"Filterung nach bestimmten Attributen unter Verwendung des angegebenen " +"Filter-Backends und verwendet dynamisch verschiedene Serialisierer auf der " "Grundlage der durchgeführten Aktion." diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.mo b/engine/core/locale/en_GB/LC_MESSAGES/django.mo index 8c58df4643caa0365eb3ce2829694c1f50c3be00..b900c9b6288144f5bff183361eb3e09e889002d9 100644 GIT binary patch delta 5475 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 delta 5487 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 diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.po b/engine/core/locale/en_GB/LC_MESSAGES/django.po index 2637ef4d..6b04b851 100644 --- a/engine/core/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/core/locale/en_GB/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 Egor "fureunoir" Gorbunov # This file is distributed under the same license as the eVibes package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -31,9 +31,11 @@ msgstr "Is Active" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" -"If set to false, this object can't be seen by users without needed permission" +"If set to false, this object can't be seen by users without needed " +"permission" #: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" @@ -51,89 +53,89 @@ msgstr "Modified" msgid "when the object was last modified" msgstr "When the object was last edited" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Translations" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "General" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relations" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "additional info" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Timestamps" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Attribute Value" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Attribute Values" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Image" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Images" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Order Product" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Order Products" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Children" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Config" @@ -157,7 +159,8 @@ msgstr "Delivered" msgid "canceled" msgstr "Canceled" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Failed" @@ -199,7 +202,7 @@ msgstr "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -223,7 +226,7 @@ msgstr "Get application's exposable parameters" msgid "send a message to the support team" msgstr "Send a message to the support team" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." @@ -272,7 +275,8 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "Rewrite an existing attribute group saving non-editables" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Rewrite some fields of an existing attribute group saving non-editables" @@ -321,7 +325,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "Rewrite an existing attribute value saving non-editables" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Rewrite some fields of an existing attribute value saving non-editables" @@ -355,9 +360,9 @@ msgstr "Rewrite some fields of an existing category saving non-editables" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -375,11 +380,11 @@ msgstr "For non-staff users, only their own orders are returned." #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -411,13 +416,13 @@ msgstr "Filter by order status (case-insensitive substring match)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -469,7 +474,7 @@ msgstr "retrieve current pending order of a user" msgid "retrieves a current pending order of an authenticated user" msgstr "retrieves a current pending order of an authenticated user" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "purchase an order without account creation" @@ -603,30 +608,20 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" #: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 @@ -639,12 +634,10 @@ msgstr "(exact) Product UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -658,6 +651,9 @@ msgid "Product UUID or slug" msgstr "Product UUID or Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Create a product" @@ -1071,247 +1067,248 @@ msgstr "Level" msgid "Product UUID" msgstr "Product UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data to store in cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Cached data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Remove/Add" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Please provide `wishlist_uuid` value." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" -"Please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"Please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Attributes" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grouped attributes" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groups of attributes" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Categories" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Brands" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categories" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "Which attributes and values can be used for filtering this category." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Minimum and maximum prices for products in this category, if available." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags for this category" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Products in this category" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendors" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (Y coordinate)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (X coordinate)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Comment" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Rating value from 1 to 10, inclusive, or 0 if not set." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Represents feedback from a user." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Notifications" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Billing address" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1319,53 +1316,53 @@ msgstr "" "Shipping address for this order, leave blank if same as billing address or " "if not applicable" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Total price of this order" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Total quantity of products in order" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transactions for this order" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Orders" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Image URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Product's images" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Category" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Feedbacks" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribute groups" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1373,7 +1370,7 @@ msgstr "Attribute groups" msgid "price" msgstr "Price" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1381,39 +1378,39 @@ msgstr "Price" msgid "quantity" msgstr "Quantity" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Number of feedbacks" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Discount price" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Products" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Products on sale" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promotions" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendor" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1421,98 +1418,98 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Wishlisted products" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Wishlists" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Tagged products" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Product tags" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Tagged categories" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Categories' tags" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Project name" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Company Name" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Company Address" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Company Phone Number" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', sometimes it must be used instead of host user value" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Email host user" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Maximum amount for payment" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Minimum amount for payment" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analytics data" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configuration" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Language code" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Language name" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Language flag, if exists :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Get a list of supported languages" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Products search results" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Products search results" @@ -1726,12 +1723,14 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." #: engine/core/models.py:448 msgid "name of this brand" @@ -1775,15 +1774,15 @@ msgstr "Categories" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1927,15 +1926,15 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." #: engine/core/models.py:733 @@ -1997,13 +1996,13 @@ msgstr "Attribute" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." #: engine/core/models.py:788 msgid "attribute of this value" @@ -2020,14 +2019,14 @@ msgstr "The specific value for this attribute" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." @@ -2069,15 +2068,15 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." #: engine/core/models.py:880 msgid "percentage discount for the selected products" @@ -2145,15 +2144,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." #: engine/core/models.py:998 msgid "documentary" @@ -2169,23 +2168,23 @@ msgstr "Unresolved" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2340,15 +2339,15 @@ msgstr "Invalid discount type for promocode {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." @@ -2519,7 +2518,8 @@ msgid "feedback comments" msgstr "Feedback comments" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" @@ -2663,16 +2663,16 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." #: engine/core/models.py:1961 msgid "download" @@ -2729,12 +2729,11 @@ msgstr "Hello %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" -"Thank you for your order #%(order.pk)s! We are pleased to inform you that we " -"have taken your order into work. Below are the details of your order:" +"Thank you for your order #%(order.pk)s! We are pleased to inform you that we" +" have taken your order into work. Below are the details of your order:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2844,12 +2843,11 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" -"Thank you for your order! We are pleased to confirm your purchase. Below are " -"the details of your order:" +"Thank you for your order! We are pleased to confirm your purchase. Below are" +" the details of your order:" #: engine/core/templates/shipped_order_created_email.html:123 #: engine/core/templates/shipped_order_delivered_email.html:123 @@ -2886,23 +2884,23 @@ msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | contact us initiated" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contact us initiated" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Order Confirmation" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | order confirmation" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Order Delivered" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order delivered" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode granted" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2977,14 +2975,10 @@ msgstr "Handles the logic of buying as a business without registration." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3013,30 +3007,26 @@ msgstr "favicon not found" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3050,19 +3040,21 @@ msgstr "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3078,21 +3070,21 @@ msgstr "" "specific fields or retrieving detailed versus simplified information " "depending on the request." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3106,7 +3098,7 @@ msgstr "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3118,7 +3110,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3136,7 +3128,7 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3150,59 +3142,59 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3210,33 +3202,33 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3250,12 +3242,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.mo b/engine/core/locale/en_US/LC_MESSAGES/django.mo index 54052d9c2a4a799e0d9998cb58e3e3c83527750b..77ab373e92049407f5e391856fce7cb9db78a83b 100644 GIT binary patch delta 5476 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 delta 5484 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -27,9 +27,11 @@ msgstr "Is Active" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" -"If set to false, this object can't be seen by users without needed permission" +"If set to false, this object can't be seen by users without needed " +"permission" #: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" @@ -47,89 +49,89 @@ msgstr "Modified" msgid "when the object was last modified" msgstr "When the object was last edited" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Translations" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "General" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relations" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "additional info" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Timestamps" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Attribute Value" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Attribute Values" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Image" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Images" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Order Product" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Order Products" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Children" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Config" @@ -153,7 +155,8 @@ msgstr "Delivered" msgid "canceled" msgstr "Canceled" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Failed" @@ -195,7 +198,7 @@ msgstr "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -219,7 +222,7 @@ msgstr "Get application's exposable parameters" msgid "send a message to the support team" msgstr "Send a message to the support team" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." @@ -268,7 +271,8 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "Rewrite an existing attribute group saving non-editables" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Rewrite some fields of an existing attribute group saving non-editables" @@ -317,7 +321,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "Rewrite an existing attribute value saving non-editables" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Rewrite some fields of an existing attribute value saving non-editables" @@ -351,9 +356,9 @@ msgstr "Rewrite some fields of an existing category saving non-editables" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -371,11 +376,11 @@ msgstr "For non-staff users, only their own orders are returned." #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -407,13 +412,13 @@ msgstr "Filter by order status (case-insensitive substring match)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -465,7 +470,7 @@ msgstr "retrieve current pending order of a user" msgid "retrieves a current pending order of an authenticated user" msgstr "retrieves a current pending order of an authenticated user" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "purchase an order without account creation" @@ -599,26 +604,17 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…`\n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" @@ -634,12 +630,10 @@ msgstr "(exact) Product UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -653,6 +647,9 @@ msgid "Product UUID or slug" msgstr "Product UUID or Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Create a product" @@ -1066,247 +1063,248 @@ msgstr "Level" msgid "Product UUID" msgstr "Product UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data to store in cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Cached data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Remove/Add" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Please provide `wishlist_uuid` value." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" -"Please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"Please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Attributes" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grouped attributes" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groups of attributes" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Categories" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Brands" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categories" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "Which attributes and values can be used for filtering this category." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Minimum and maximum prices for products in this category, if available." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags for this category" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Products in this category" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendors" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (Y coordinate)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (X coordinate)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "How to" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Rating value from 1 to 10, inclusive, or 0 if not set." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Represents feedback from a user." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Notifications" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Billing address" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1314,53 +1312,53 @@ msgstr "" "Shipping address for this order, leave blank if same as billing address or " "if not applicable" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Total price of this order" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Total quantity of products in order" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transactions for this order" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Orders" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Image URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Product's images" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Category" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Feedbacks" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribute groups" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1368,7 +1366,7 @@ msgstr "Attribute groups" msgid "price" msgstr "Price" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1376,39 +1374,39 @@ msgstr "Price" msgid "quantity" msgstr "Quantity" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Number of feedbacks" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Discount price" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Products" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Products on sale" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promotions" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendor" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1416,98 +1414,98 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Wishlisted products" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Wishlists" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Tagged products" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Product tags" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Tagged categories" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Categories' tags" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Project name" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Company Name" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Company Address" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Company Phone Number" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', sometimes it must be used instead of host user value" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Email host user" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Maximum amount for payment" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Minimum amount for payment" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analytics data" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configuration" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Language code" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Language name" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Language flag, if exists :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Get a list of supported languages" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Products search results" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Products search results" @@ -1721,12 +1719,14 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." #: engine/core/models.py:448 msgid "name of this brand" @@ -1770,15 +1770,15 @@ msgstr "Categories" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1922,15 +1922,15 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." #: engine/core/models.py:733 @@ -1992,13 +1992,13 @@ msgstr "Attribute" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." #: engine/core/models.py:788 msgid "attribute of this value" @@ -2015,14 +2015,14 @@ msgstr "The specific value for this attribute" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." @@ -2064,15 +2064,15 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." #: engine/core/models.py:880 msgid "percentage discount for the selected products" @@ -2140,15 +2140,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." #: engine/core/models.py:998 msgid "documentary" @@ -2164,23 +2164,23 @@ msgstr "Unresolved" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2335,15 +2335,15 @@ msgstr "Invalid discount type for promocode {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." @@ -2514,7 +2514,8 @@ msgid "feedback comments" msgstr "Feedback comments" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" @@ -2658,16 +2659,16 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." #: engine/core/models.py:1961 msgid "download" @@ -2724,12 +2725,11 @@ msgstr "Hello %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" -"Thank you for your order #%(order.pk)s! We are pleased to inform you that we " -"have taken your order into work. Below are the details of your order:" +"Thank you for your order #%(order.pk)s! We are pleased to inform you that we" +" have taken your order into work. Below are the details of your order:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2839,12 +2839,11 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" -"Thank you for your order! We are pleased to confirm your purchase. Below are " -"the details of your order:" +"Thank you for your order! We are pleased to confirm your purchase. Below are" +" the details of your order:" #: engine/core/templates/shipped_order_created_email.html:123 #: engine/core/templates/shipped_order_delivered_email.html:123 @@ -2881,23 +2880,23 @@ msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | contact us initiated" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contact us initiated" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Order Confirmation" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | order confirmation" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Order Delivered" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order delivered" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode granted" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2972,14 +2971,10 @@ msgstr "Handles the logic of buying as a business without registration." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3008,30 +3003,26 @@ msgstr "favicon not found" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3045,19 +3036,21 @@ msgstr "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3073,21 +3066,21 @@ msgstr "" "specific fields or retrieving detailed versus simplified information " "depending on the request." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3101,7 +3094,7 @@ msgstr "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3113,7 +3106,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3131,7 +3124,7 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3145,59 +3138,59 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3205,33 +3198,33 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3245,12 +3238,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.mo b/engine/core/locale/es_ES/LC_MESSAGES/django.mo index dfca910fac028160b4b8b2c0093854d47b9ea230..012cd06aefbf003822844497520d16045b4dd264 100644 GIT binary patch delta 5500 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 P@P7?`y)W-r>}35HU0Ck6 diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.po b/engine/core/locale/es_ES/LC_MESSAGES/django.po index 2f14bae8..94e9ab84 100644 --- a/engine/core/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/core/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Está activo" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Si se establece en false, este objeto no puede ser visto por los usuarios " "sin el permiso necesario" @@ -50,89 +51,89 @@ msgstr "Modificado" msgid "when the object was last modified" msgstr "Cuándo se editó el objeto por última vez" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Traducciones" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "General" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relaciones" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "información adicional" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadatos" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Marcas de tiempo" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activar %(verbose_name_plural)s seleccionado" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Los artículos seleccionados se han activado." -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Desactivar %(verbose_name_plural)s seleccionado" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Los artículos seleccionados se han desactivado." -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Atributo Valor" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Valores de los atributos" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Imagen" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Imágenes" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Acciones" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Pedir un producto" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Pedir productos" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Niños" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Configurar" @@ -156,7 +157,8 @@ msgstr "Entregado" msgid "canceled" msgstr "Cancelado" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Fallido" @@ -198,7 +200,7 @@ msgstr "" "negociación de contenido. El idioma se puede seleccionar tanto con Accept-" "Language como con el parámetro de consulta." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "E/S de caché" @@ -208,8 +210,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Aplicar sólo una clave para leer datos permitidos de la caché.\n" -"Aplicar clave, datos y tiempo de espera con autenticación para escribir " -"datos en la caché." +"Aplicar clave, datos y tiempo de espera con autenticación para escribir datos en la caché." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -223,7 +224,7 @@ msgstr "Obtener los parámetros exponibles de la aplicación" msgid "send a message to the support team" msgstr "Enviar un mensaje al equipo de asistencia" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Solicitar una URL CORSed. Solo se permite https." @@ -245,8 +246,8 @@ msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -"Compra un pedido como empresa, utilizando los `productos` proporcionados con " -"`product_uuid` y `attributes`." +"Compra un pedido como empresa, utilizando los `productos` proporcionados con" +" `product_uuid` y `attributes`." #: engine/core/docs/drf/views.py:164 msgid "download a digital asset from purchased digital order" @@ -273,7 +274,8 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "Reescribir un grupo de atributos existente guardando los no editables" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Reescribir algunos campos de un grupo de atributos existente guardando los " "no editables" @@ -301,7 +303,8 @@ msgstr "Reescribir un atributo existente guardando los no editables" #: engine/core/docs/drf/viewsets.py:141 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -"Reescribir algunos campos de un atributo existente guardando los no editables" +"Reescribir algunos campos de un atributo existente guardando los no " +"editables" #: engine/core/docs/drf/viewsets.py:151 msgid "list all attribute values (simple view)" @@ -324,10 +327,11 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "Reescribir un valor de atributo existente guardando los no editables" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" -"Reescribir algunos campos de un valor de atributo existente guardando los no " -"editables" +"Reescribir algunos campos de un valor de atributo existente guardando los no" +" editables" #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 msgid "list all categories (simple view)" @@ -361,9 +365,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -383,12 +387,12 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Búsqueda de subcadenas sin distinción entre mayúsculas y minúsculas en " -"human_readable_id, order_products.product.name y order_products.product." -"partnumber" +"human_readable_id, order_products.product.name y " +"order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -409,8 +413,8 @@ msgstr "Filtrar por ID de pedido exacto legible por el ser humano" #: engine/core/docs/drf/viewsets.py:308 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" -"Filtrar por correo electrónico del usuario (coincidencia exacta insensible a " -"mayúsculas y minúsculas)" +"Filtrar por correo electrónico del usuario (coincidencia exacta insensible a" +" mayúsculas y minúsculas)" #: engine/core/docs/drf/viewsets.py:313 msgid "Filter by user's UUID" @@ -424,9 +428,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Ordenar por: uuid, human_readable_id, user_email, user, status, created, " "modified, buy_time, random. Utilice el prefijo '-' para orden descendente " @@ -484,7 +488,7 @@ msgstr "recuperar el pedido pendiente actual de un usuario" msgid "retrieves a current pending order of an authenticated user" msgstr "recupera un pedido pendiente actual de un usuario autenticado" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "comprar un pedido sin crear una cuenta" @@ -573,7 +577,8 @@ msgstr "Reescribir un atributo existente guardando los no editables" #: engine/core/docs/drf/viewsets.py:496 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -"Reescribir algunos campos de un atributo existente guardando los no editables" +"Reescribir algunos campos de un atributo existente guardando los no " +"editables" #: engine/core/docs/drf/viewsets.py:503 msgid "retrieve current pending wishlist of a user" @@ -628,31 +633,20 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrar por uno o varios pares nombre/valor de atributo. \n" "- Sintaxis**: `nombre_attr=método-valor[;attr2=método2-valor2]...`.\n" -"- Métodos** (por defecto `icontiene` si se omite): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" -"- Tipificación de valores**: Se intenta primero JSON (para poder pasar " -"listas/dictos), `true`/`false` para booleanos, enteros, flotantes; en caso " -"contrario se trata como cadena. \n" -"- Base64**: prefiérelo con `b64-` para codificar en base64 el valor sin " -"procesar. \n" +"- Métodos** (por defecto `icontiene` si se omite): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" +"- Tipificación de valores**: Se intenta primero JSON (para poder pasar listas/dictos), `true`/`false` para booleanos, enteros, flotantes; en caso contrario se trata como cadena. \n" +"- Base64**: prefiérelo con `b64-` para codificar en base64 el valor sin procesar. \n" "Ejemplos: \n" -"`color=rojo exacto`, `tamaño=gt-10`, `características=en-[\"wifi\", " -"\"bluetooth\"]`,\n" +"`color=rojo exacto`, `tamaño=gt-10`, `características=en-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." #: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 @@ -665,12 +659,10 @@ msgstr "UUID (exacto) del producto" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Lista separada por comas de campos por los que ordenar. Prefiérela con `-` " -"para que sea descendente. \n" +"Lista separada por comas de campos por los que ordenar. Prefiérela con `-` para que sea descendente. \n" "**Permitido:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -684,6 +676,9 @@ msgid "Product UUID or slug" msgstr "UUID o babosa del producto" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Crear un producto" @@ -876,7 +871,8 @@ msgstr "Eliminar la imagen de un producto" #: engine/core/docs/drf/viewsets.py:1079 msgid "rewrite an existing product image saving non-editables" -msgstr "Reescribir una imagen de producto existente guardando los no editables" +msgstr "" +"Reescribir una imagen de producto existente guardando los no editables" #: engine/core/docs/drf/viewsets.py:1086 msgid "rewrite some fields of an existing product image saving non-editables" @@ -1070,7 +1066,8 @@ msgstr "SKU" #: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "Debe haber un category_uuid para usar la bandera include_subcategories" +msgstr "" +"Debe haber un category_uuid para usar la bandera include_subcategories" #: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" @@ -1118,250 +1115,253 @@ msgstr "Nivel" msgid "Product UUID" msgstr "UUID del producto" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Clave que hay que buscar o introducir en la caché" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Datos a almacenar en caché" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Tiempo de espera en segundos para poner los datos en la caché" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Datos en caché" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Datos JSON camelizados de la URL solicitada" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Sólo se permiten URL que empiecen por http(s)://." -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Añadir un producto al pedido" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} ¡no encontrado!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Eliminar todos los productos del pedido" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Comprar un pedido" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" +msgstr "" +"Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Realizar una acción en una lista de productos del pedido" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Quitar/Agregar" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Realizar una acción en una lista de productos de la lista de deseos" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Por favor, proporcione el valor `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de deseos {wishlist_uuid} ¡no encontrada!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Añadir un producto al pedido" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Comprar un pedido" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" -"Por favor, envíe los atributos como una cadena formateada como attr1=valor1," -"attr2=valor2" +"Por favor, envíe los atributos como una cadena formateada como " +"attr1=valor1,attr2=valor2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Añadir o eliminar un comentario para el pedido-producto" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "No se ha encontrado el producto {order_product_uuid}." -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Cadena de dirección original proporcionada por el usuario" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "El límite debe estar entre 1 y 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona a las mil maravillas" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Atributos" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atributos agrupados" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Categorías" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Marcas" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorías" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Porcentaje de recargo" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Qué atributos y valores se pueden utilizar para filtrar esta categoría." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Precios mínimo y máximo de los productos de esta categoría, si están " "disponibles." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Etiquetas para esta categoría" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Productos de esta categoría" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendedores" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitud (coordenada Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitud (coordenada X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Cómo" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -"Valor de calificación de 1 a 10, ambos inclusive, o 0 si no está configurado." +"Valor de calificación de 1 a 10, ambos inclusive, o 0 si no está " +"configurado." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representa la opinión de un usuario." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Notificaciones" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Descargar url para este producto de pedido si procede" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Comentarios" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Una lista de los productos del pedido" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Dirección de facturación" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1369,53 +1369,53 @@ msgstr "" "Dirección de envío para este pedido, dejar en blanco si es la misma que la " "de facturación o si no procede" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Precio total de este pedido" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Cantidad total de productos del pedido" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "¿Están todos los productos en el pedido digital" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transacciones para este pedido" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Pedidos" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL de la imagen" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Imágenes del producto" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Categoría" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Comentarios" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Marca" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1423,7 +1423,7 @@ msgstr "Grupos de atributos" msgid "price" msgstr "Precio" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1431,39 +1431,39 @@ msgstr "Precio" msgid "quantity" msgstr "Cantidad" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Número de reacciones" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Productos sólo disponibles para pedidos personales" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Precio reducido" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Productos" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Códigos promocionales" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Productos a la venta" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promociones" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendedor" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1471,99 +1471,99 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Productos deseados" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Listas de deseos" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Productos con etiqueta" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Etiquetas del producto" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Categorías" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Etiquetas de las categorías" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nombre del proyecto" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Nombre de la empresa" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Dirección de la empresa" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Teléfono de la empresa" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', a veces debe utilizarse en lugar del valor del usuario host" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Correo electrónico del usuario anfitrión" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Importe máximo de pago" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Importe mínimo de pago" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Datos analíticos" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Datos publicitarios" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configuración" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Código de idioma" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Nombre de la lengua" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Bandera de idioma, si existe :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Obtener una lista de los idiomas admitidos" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Resultados de la búsqueda de productos" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Resultados de la búsqueda de productos" @@ -1577,8 +1577,8 @@ msgstr "" "Representa un grupo de atributos, que puede ser jerárquico. Esta clase se " "utiliza para gestionar y organizar grupos de atributos. Un grupo de " "atributos puede tener un grupo padre, formando una estructura jerárquica. " -"Esto puede ser útil para categorizar y gestionar los atributos de manera más " -"eficaz en un sistema complejo." +"Esto puede ser útil para categorizar y gestionar los atributos de manera más" +" eficaz en un sistema complejo." #: engine/core/models.py:91 msgid "parent of this group" @@ -1608,11 +1608,11 @@ msgid "" msgstr "" "Representa una entidad de proveedor capaz de almacenar información sobre " "proveedores externos y sus requisitos de interacción. La clase Proveedor se " -"utiliza para definir y gestionar la información relacionada con un proveedor " -"externo. Almacena el nombre del vendedor, los detalles de autenticación " +"utiliza para definir y gestionar la información relacionada con un proveedor" +" externo. Almacena el nombre del vendedor, los detalles de autenticación " "necesarios para la comunicación y el porcentaje de marcado aplicado a los " -"productos recuperados del vendedor. Este modelo también mantiene metadatos y " -"restricciones adicionales, lo que lo hace adecuado para su uso en sistemas " +"productos recuperados del vendedor. Este modelo también mantiene metadatos y" +" restricciones adicionales, lo que lo hace adecuado para su uso en sistemas " "que interactúan con proveedores externos." #: engine/core/models.py:124 @@ -1785,7 +1785,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Representa un objeto Marca en el sistema. Esta clase maneja información y " "atributos relacionados con una marca, incluyendo su nombre, logotipos, " @@ -1835,8 +1836,8 @@ msgstr "Categorías" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1845,8 +1846,8 @@ msgstr "" "Representa el stock de un producto gestionado en el sistema. Esta clase " "proporciona detalles sobre la relación entre vendedores, productos y su " "información de existencias, así como propiedades relacionadas con el " -"inventario como precio, precio de compra, cantidad, SKU y activos digitales. " -"Forma parte del sistema de gestión de inventario para permitir el " +"inventario como precio, precio de compra, cantidad, SKU y activos digitales." +" Forma parte del sistema de gestión de inventario para permitir el " "seguimiento y la evaluación de los productos disponibles de varios " "vendedores." @@ -1929,13 +1930,13 @@ msgstr "" "Representa un producto con atributos como categoría, marca, etiquetas, " "estado digital, nombre, descripción, número de pieza y babosa. Proporciona " "propiedades de utilidad relacionadas para recuperar valoraciones, recuentos " -"de comentarios, precio, cantidad y total de pedidos. Diseñado para su uso en " -"un sistema que gestiona el comercio electrónico o la gestión de inventarios. " -"Esta clase interactúa con modelos relacionados (como Category, Brand y " -"ProductTag) y gestiona el almacenamiento en caché de las propiedades a las " -"que se accede con frecuencia para mejorar el rendimiento. Se utiliza para " -"definir y manipular datos de productos y su información asociada dentro de " -"una aplicación." +"de comentarios, precio, cantidad y total de pedidos. Diseñado para su uso en" +" un sistema que gestiona el comercio electrónico o la gestión de " +"inventarios. Esta clase interactúa con modelos relacionados (como Category, " +"Brand y ProductTag) y gestiona el almacenamiento en caché de las propiedades" +" a las que se accede con frecuencia para mejorar el rendimiento. Se utiliza " +"para definir y manipular datos de productos y su información asociada dentro" +" de una aplicación." #: engine/core/models.py:585 msgid "category this product belongs to" @@ -1990,14 +1991,14 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Representa un atributo en el sistema. Esta clase se utiliza para definir y " "gestionar atributos, que son datos personalizables que pueden asociarse a " -"otras entidades. Los atributos tienen asociadas categorías, grupos, tipos de " -"valores y nombres. El modelo admite varios tipos de valores, como cadenas, " +"otras entidades. Los atributos tienen asociadas categorías, grupos, tipos de" +" valores y nombres. El modelo admite varios tipos de valores, como cadenas, " "enteros, flotantes, booleanos, matrices y objetos. Esto permite una " "estructuración dinámica y flexible de los datos." @@ -2061,9 +2062,9 @@ msgstr "Atributo" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Representa un valor específico para un atributo vinculado a un producto. " "Vincula el \"atributo\" a un \"valor\" único, lo que permite una mejor " @@ -2084,8 +2085,8 @@ msgstr "El valor específico de este atributo" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2134,8 +2135,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Representa una campaña promocional para productos con descuento. Esta clase " "se utiliza para definir y gestionar campañas promocionales que ofrecen un " @@ -2211,8 +2212,8 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Representa un registro documental vinculado a un producto. Esta clase se " "utiliza para almacenar información sobre documentales relacionados con " @@ -2235,14 +2236,14 @@ msgstr "Sin resolver" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Representa una entidad de dirección que incluye detalles de ubicación y " "asociaciones con un usuario. Proporciona funcionalidad para el " @@ -2251,8 +2252,8 @@ msgstr "" "información detallada sobre direcciones, incluidos componentes como calle, " "ciudad, región, país y geolocalización (longitud y latitud). Admite la " "integración con API de geocodificación, permitiendo el almacenamiento de " -"respuestas API sin procesar para su posterior procesamiento o inspección. La " -"clase también permite asociar una dirección a un usuario, facilitando el " +"respuestas API sin procesar para su posterior procesamiento o inspección. La" +" clase también permite asociar una dirección a un usuario, facilitando el " "manejo personalizado de los datos." #: engine/core/models.py:1029 @@ -2410,8 +2411,8 @@ msgstr "¡Tipo de descuento no válido para el código promocional {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2419,9 +2420,9 @@ msgstr "" "dentro de la aplicación, incluyendo sus diversos atributos como información " "de facturación y envío, estado, usuario asociado, notificaciones y " "operaciones relacionadas. Los pedidos pueden tener productos asociados, se " -"pueden aplicar promociones, establecer direcciones y actualizar los datos de " -"envío o facturación. Del mismo modo, la funcionalidad permite gestionar los " -"productos en el ciclo de vida del pedido." +"pueden aplicar promociones, establecer direcciones y actualizar los datos de" +" envío o facturación. Del mismo modo, la funcionalidad permite gestionar los" +" productos en el ciclo de vida del pedido." #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2594,7 +2595,8 @@ msgid "feedback comments" msgstr "Comentarios" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" @@ -2629,8 +2631,8 @@ msgstr "" "atributos del producto y su estado. Gestiona las notificaciones para el " "usuario y los administradores y maneja operaciones como la devolución del " "saldo del producto o la adición de comentarios. Este modelo también " -"proporciona métodos y propiedades que soportan la lógica de negocio, como el " -"cálculo del precio total o la generación de una URL de descarga para " +"proporciona métodos y propiedades que soportan la lógica de negocio, como el" +" cálculo del precio total o la generación de una URL de descarga para " "productos digitales. El modelo se integra con los modelos Pedido y Producto " "y almacena una referencia a ellos." @@ -2742,16 +2744,17 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Representa la funcionalidad de descarga de activos digitales asociados a " -"pedidos. La clase DigitalAssetDownload proporciona la capacidad de gestionar " -"y acceder a descargas relacionadas con productos de pedidos. Mantiene " +"pedidos. La clase DigitalAssetDownload proporciona la capacidad de gestionar" +" y acceder a descargas relacionadas con productos de pedidos. Mantiene " "información sobre el producto del pedido asociado, el número de descargas y " -"si el activo es visible públicamente. Incluye un método para generar una URL " -"para descargar el activo cuando el pedido asociado está en estado completado." +"si el activo es visible públicamente. Incluye un método para generar una URL" +" para descargar el activo cuando el pedido asociado está en estado " +"completado." #: engine/core/models.py:1961 msgid "download" @@ -2809,8 +2812,7 @@ msgstr "Hola %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "¡Gracias por su pedido #%(order.pk)s! Nos complace informarle de que hemos " @@ -2924,8 +2926,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Gracias por su pedido. Nos complace confirmarle su compra. A continuación " @@ -2967,23 +2968,23 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | contacto iniciado" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contacto iniciado" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmación de pedido" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmación de pedido" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Pedido entregado" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | pedido entregado" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode granted" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3005,8 +3006,8 @@ msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -"Gestiona la solicitud del índice del mapa del sitio y devuelve una respuesta " -"XML. Se asegura de que la respuesta incluya el encabezado de tipo de " +"Gestiona la solicitud del índice del mapa del sitio y devuelve una respuesta" +" XML. Se asegura de que la respuesta incluya el encabezado de tipo de " "contenido apropiado para XML." #: engine/core/views.py:88 @@ -3023,7 +3024,8 @@ msgstr "" msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -"Devuelve una lista de los idiomas admitidos y su información correspondiente." +"Devuelve una lista de los idiomas admitidos y su información " +"correspondiente." #: engine/core/views.py:155 msgid "Returns the parameters of the website as a JSON object." @@ -3060,14 +3062,10 @@ msgstr "Maneja la lógica de la compra como empresa sin registro." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gestiona la descarga de un activo digital asociado a un pedido.\n" -"Esta función intenta servir el archivo del activo digital ubicado en el " -"directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se " -"genera un error HTTP 404 para indicar que el recurso no está disponible." +"Esta función intenta servir el archivo del activo digital ubicado en el directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se genera un error HTTP 404 para indicar que el recurso no está disponible." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3096,31 +3094,27 @@ msgstr "favicon no encontrado" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gestiona las peticiones del favicon de un sitio web.\n" -"Esta función intenta servir el archivo favicon ubicado en el directorio " -"estático del proyecto. Si no se encuentra el archivo favicon, se genera un " -"error HTTP 404 para indicar que el recurso no está disponible." +"Esta función intenta servir el archivo favicon ubicado en el directorio estático del proyecto. Si no se encuentra el archivo favicon, se genera un error HTTP 404 para indicar que el recurso no está disponible." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Redirige la petición a la página índice de administración. La función " "gestiona las peticiones HTTP entrantes y las redirige a la página de índice " -"de la interfaz de administración de Django. Utiliza la función `redirect` de " -"Django para gestionar la redirección HTTP." +"de la interfaz de administración de Django. Utiliza la función `redirect` de" +" Django para gestionar la redirección HTTP." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "Devuelve la versión actual del eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3134,20 +3128,21 @@ msgstr "" "Incluye soporte para clases serializadoras dinámicas basadas en la acción " "actual, permisos personalizables y formatos de representación." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Representa un conjunto de vistas para gestionar objetos AttributeGroup. " "Maneja operaciones relacionadas con AttributeGroup, incluyendo filtrado, " -"serialización y recuperación de datos. Esta clase forma parte de la capa API " -"de la aplicación y proporciona una forma estandarizada de procesar las " +"serialización y recuperación de datos. Esta clase forma parte de la capa API" +" de la aplicación y proporciona una forma estandarizada de procesar las " "solicitudes y respuestas de los datos de AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3156,30 +3151,30 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"Gestiona las operaciones relacionadas con los objetos Attribute dentro de la " -"aplicación. Proporciona un conjunto de puntos finales de la API para " -"interactuar con los datos de los atributos. Esta clase gestiona la consulta, " -"el filtrado y la serialización de objetos Attribute, lo que permite un " +"Gestiona las operaciones relacionadas con los objetos Attribute dentro de la" +" aplicación. Proporciona un conjunto de puntos finales de la API para " +"interactuar con los datos de los atributos. Esta clase gestiona la consulta," +" el filtrado y la serialización de objetos Attribute, lo que permite un " "control dinámico de los datos devueltos, como el filtrado por campos " "específicos o la recuperación de información detallada o simplificada en " "función de la solicitud." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Conjunto de vistas para gestionar objetos AttributeValue. Este conjunto de " -"vistas proporciona funcionalidad para listar, recuperar, crear, actualizar y " -"eliminar objetos AttributeValue. Se integra con los mecanismos viewset de " +"vistas proporciona funcionalidad para listar, recuperar, crear, actualizar y" +" eliminar objetos AttributeValue. Se integra con los mecanismos viewset de " "Django REST Framework y utiliza serializadores apropiados para diferentes " "acciones. Las capacidades de filtrado se proporcionan a través de " "DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3190,10 +3185,10 @@ msgstr "" "Gestiona vistas para operaciones relacionadas con Categorías. La clase " "CategoryViewSet se encarga de gestionar las operaciones relacionadas con el " "modelo Category del sistema. Permite recuperar, filtrar y serializar datos " -"de categorías. El conjunto de vistas también aplica permisos para garantizar " -"que sólo los usuarios autorizados puedan acceder a datos específicos." +"de categorías. El conjunto de vistas también aplica permisos para garantizar" +" que sólo los usuarios autorizados puedan acceder a datos específicos." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3201,11 +3196,11 @@ msgid "" "endpoints for Brand objects." msgstr "" "Representa un conjunto de vistas para gestionar instancias de Brand. Esta " -"clase proporciona funcionalidad para consultar, filtrar y serializar objetos " -"Brand. Utiliza el marco ViewSet de Django para simplificar la implementación " -"de puntos finales de API para objetos Brand." +"clase proporciona funcionalidad para consultar, filtrar y serializar objetos" +" Brand. Utiliza el marco ViewSet de Django para simplificar la " +"implementación de puntos finales de API para objetos Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3217,13 +3212,14 @@ msgid "" msgstr "" "Gestiona las operaciones relacionadas con el modelo `Producto` en el " "sistema. Esta clase proporciona un conjunto de vistas para la gestión de " -"productos, incluyendo su filtrado, serialización y operaciones en instancias " -"específicas. Se extiende desde `EvibesViewSet` para utilizar funcionalidades " -"comunes y se integra con el framework Django REST para operaciones RESTful " -"API. Incluye métodos para recuperar detalles del producto, aplicar permisos " -"y acceder a comentarios relacionados de un producto." +"productos, incluyendo su filtrado, serialización y operaciones en instancias" +" específicas. Se extiende desde `EvibesViewSet` para utilizar " +"funcionalidades comunes y se integra con el framework Django REST para " +"operaciones RESTful API. Incluye métodos para recuperar detalles del " +"producto, aplicar permisos y acceder a comentarios relacionados de un " +"producto." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3238,13 +3234,13 @@ msgstr "" "proporcionar un acceso simplificado a los recursos relacionados con el " "vendedor a través del marco REST de Django." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Representación de un conjunto de vistas que maneja objetos Feedback. Esta " @@ -3252,34 +3248,34 @@ msgstr "" "incluyendo el listado, filtrado y recuperación de detalles. El propósito de " "este conjunto de vistas es proporcionar diferentes serializadores para " "diferentes acciones e implementar el manejo basado en permisos de los " -"objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del " -"sistema de filtrado de Django para la consulta de datos." +"objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del" +" sistema de filtrado de Django para la consulta de datos." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet para la gestión de pedidos y operaciones relacionadas. Esta clase " "proporciona funcionalidad para recuperar, modificar y gestionar objetos de " -"pedido. Incluye varios puntos finales para gestionar operaciones de pedidos, " -"como añadir o eliminar productos, realizar compras para usuarios registrados " -"y no registrados, y recuperar los pedidos pendientes del usuario autenticado " -"actual. ViewSet utiliza varios serializadores en función de la acción " -"específica que se esté realizando y aplica los permisos correspondientes al " -"interactuar con los datos del pedido." +"pedido. Incluye varios puntos finales para gestionar operaciones de pedidos," +" como añadir o eliminar productos, realizar compras para usuarios " +"registrados y no registrados, y recuperar los pedidos pendientes del usuario" +" autenticado actual. ViewSet utiliza varios serializadores en función de la " +"acción específica que se esté realizando y aplica los permisos " +"correspondientes al interactuar con los datos del pedido." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Proporciona un conjunto de vistas para gestionar entidades OrderProduct. " @@ -3289,13 +3285,13 @@ msgstr "" "Además, proporciona una acción detallada para gestionar los comentarios " "sobre las instancias de OrderProduct." -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestiona las operaciones relacionadas con las imágenes de productos en la " "aplicación." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3303,21 +3299,21 @@ msgstr "" "Gestiona la recuperación y el manejo de instancias de PromoCode a través de " "varias acciones de la API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Representa un conjunto de vistas para gestionar promociones." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestiona las operaciones relacionadas con los datos de Stock en el sistema." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3331,7 +3327,7 @@ msgstr "" "integrados para garantizar que los usuarios sólo puedan gestionar sus " "propias listas de deseos a menos que se concedan permisos explícitos." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3342,15 +3338,15 @@ msgstr "" "Esta clase proporciona la funcionalidad viewset para la gestión de objetos " "`Address`. La clase AddressViewSet permite operaciones CRUD, filtrado y " "acciones personalizadas relacionadas con entidades de direcciones. Incluye " -"comportamientos especializados para diferentes métodos HTTP, anulaciones del " -"serializador y gestión de permisos basada en el contexto de la solicitud." +"comportamientos especializados para diferentes métodos HTTP, anulaciones del" +" serializador y gestión de permisos basada en el contexto de la solicitud." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/fa_IR/LC_MESSAGES/django.po b/engine/core/locale/fa_IR/LC_MESSAGES/django.po index b5a5edac..07f0c955 100644 --- a/engine/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/core/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,89 +49,89 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "" @@ -194,7 +194,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -216,7 +216,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "" @@ -344,9 +344,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "" @@ -450,7 +450,7 @@ msgstr "" msgid "retrieves a current pending order of an authenticated user" msgstr "" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "" @@ -614,6 +614,9 @@ msgid "Product UUID or slug" msgstr "" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "" @@ -1026,296 +1029,296 @@ msgstr "" msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "" -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:204 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1323,7 +1326,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1331,39 +1334,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1371,98 +1374,98 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "" @@ -2693,22 +2696,22 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" +msgid "{settings.PROJECT_NAME} | contact us initiated" msgstr "" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" +msgid "{settings.PROJECT_NAME} | order confirmation" msgstr "" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" +msgid "{settings.PROJECT_NAME} | order delivered" msgstr "" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" msgstr "" #: engine/core/utils/messages.py:3 @@ -2821,7 +2824,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2830,7 +2833,7 @@ msgid "" "and rendering formats." msgstr "" -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2838,7 +2841,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2848,7 +2851,7 @@ msgid "" "depending on the request." msgstr "" -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2857,7 +2860,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2866,7 +2869,7 @@ msgid "" "can access specific data." msgstr "" -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2874,7 +2877,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2885,7 +2888,7 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2894,7 +2897,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2904,7 +2907,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2915,7 +2918,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2924,25 +2927,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2953,7 +2956,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2962,12 +2965,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.mo b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo index d4d58a9bfbeb6a04c9db838b83931da4720dae70..cc07a3fe7f81893da9dc6e613cc32202b2c567fb 100644 GIT binary patch delta 5503 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 delta 5475 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Est actif" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Si la valeur est fixée à false, cet objet ne peut pas être vu par les " "utilisateurs qui n'ont pas l'autorisation nécessaire." @@ -50,89 +51,89 @@ msgstr "Modifié" msgid "when the object was last modified" msgstr "Date de la dernière modification de l'objet" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Traductions" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Général" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relations" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "Informations complémentaires" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Métadonnées" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Horodatage" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activer la %(verbose_name_plural)s sélectionnée" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Les articles sélectionnés ont été activés !" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Désactiver la %(verbose_name_plural)s sélectionnée" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Les articles sélectionnés ont été désactivés !" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Valeur de l'attribut" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Valeurs des attributs" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Image" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Images" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Commander un produit" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Commander des produits" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Les enfants" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Config" @@ -156,7 +157,8 @@ msgstr "Livré" msgid "canceled" msgstr "Annulé" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Échec" @@ -198,7 +200,7 @@ msgstr "" "négociation de contenu. La langue peut être sélectionnée avec Accept-" "Language et le paramètre de requête." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -207,10 +209,8 @@ msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -"Appliquer uniquement une clé pour lire les données autorisées dans la " -"mémoire cache.\n" -"Appliquer une clé, des données et un délai d'attente avec authentification " -"pour écrire des données dans la mémoire cache." +"Appliquer uniquement une clé pour lire les données autorisées dans la mémoire cache.\n" +"Appliquer une clé, des données et un délai d'attente avec authentification pour écrire des données dans la mémoire cache." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -224,7 +224,7 @@ msgstr "Obtenir les paramètres exposables de l'application" msgid "send a message to the support team" msgstr "Envoyer un message à l'équipe d'assistance" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Demander une URL CORSée. Seul https est autorisé." @@ -277,7 +277,8 @@ msgstr "" "modifiables" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Réécrire certains champs d'un groupe d'attributs existant en sauvegardant " "les non-éditables" @@ -306,8 +307,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:141 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -"Réécrire certains champs d'un attribut existant en sauvegardant les éléments " -"non modifiables" +"Réécrire certains champs d'un attribut existant en sauvegardant les éléments" +" non modifiables" #: engine/core/docs/drf/viewsets.py:151 msgid "list all attribute values (simple view)" @@ -332,7 +333,8 @@ msgstr "" "modifiables" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Réécrire certains champs d'une valeur d'attribut existante en sauvegardant " "les éléments non modifiables" @@ -369,9 +371,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Méta snapshot SEO" @@ -391,11 +393,11 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"Recherche insensible à la casse dans human_readable_id, order_products." -"product.name, et order_products.product.partnumber" +"Recherche insensible à la casse dans human_readable_id, " +"order_products.product.name, et order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -431,13 +433,13 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Ordonner par l'un des éléments suivants : uuid, human_readable_id, " -"user_email, user, status, created, modified, buy_time, random. Préfixer avec " -"'-' pour l'ordre décroissant (par exemple '-buy_time')." +"user_email, user, status, created, modified, buy_time, random. Préfixer avec" +" '-' pour l'ordre décroissant (par exemple '-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -479,8 +481,8 @@ msgid "" "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -"Finalise l'achat de la commande. Si `force_balance` est utilisé, l'achat est " -"complété en utilisant le solde de l'utilisateur ; Si `force_payment` est " +"Finalise l'achat de la commande. Si `force_balance` est utilisé, l'achat est" +" complété en utilisant le solde de l'utilisateur ; Si `force_payment` est " "utilisé, une transaction est initiée." #: engine/core/docs/drf/viewsets.py:397 @@ -491,7 +493,7 @@ msgstr "récupérer la commande en cours d'un utilisateur" msgid "retrieves a current pending order of an authenticated user" msgstr "récupère une commande en cours d'un utilisateur authentifié" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "acheter une commande sans créer de compte" @@ -548,8 +550,8 @@ msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "" -"Supprime une liste de produits d'une commande en utilisant le `product_uuid` " -"et les `attributs` fournis." +"Supprime une liste de produits d'une commande en utilisant le `product_uuid`" +" et les `attributs` fournis." #: engine/core/docs/drf/viewsets.py:459 msgid "list all wishlists (simple view)" @@ -585,8 +587,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:496 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -"Réécrire certains champs d'un attribut existant en sauvegardant les éléments " -"non modifiables" +"Réécrire certains champs d'un attribut existant en sauvegardant les éléments" +" non modifiables" #: engine/core/docs/drf/viewsets.py:503 msgid "retrieve current pending wishlist of a user" @@ -642,29 +644,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtre sur une ou plusieurs paires nom/valeur d'attribut. \n" "- **Syntaxe** : `nom_attr=méthode-valeur[;attr2=méthode2-valeur2]...`\n" -"- **Méthodes** (la valeur par défaut est `icontains` si elle est omise) : " -"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, " -"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, " -"`gt`, `gte`, `in`\n" -"- **Type de valeur** : JSON est essayé en premier (pour que vous puissiez " -"passer des listes/dicts), `true`/`false` pour les booléens, les entiers, les " -"flottants ; sinon traité comme une chaîne de caractères. \n" -"- **Base64** : préfixe avec `b64-` pour encoder la valeur brute en base64 de " -"manière sûre pour l'URL. \n" +"- **Méthodes** (la valeur par défaut est `icontains` si elle est omise) : `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- **Type de valeur** : JSON est essayé en premier (pour que vous puissiez passer des listes/dicts), `true`/`false` pour les booléens, les entiers, les flottants ; sinon traité comme une chaîne de caractères. \n" +"- **Base64** : préfixe avec `b64-` pour encoder la valeur brute en base64 de manière sûre pour l'URL. \n" "Exemples : \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -679,12 +670,10 @@ msgstr "UUID (exact) du produit" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Liste de champs séparés par des virgules à trier. Préfixer avec `-` pour un " -"tri descendant. \n" +"Liste de champs séparés par des virgules à trier. Préfixer avec `-` pour un tri descendant. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -698,6 +687,9 @@ msgid "Product UUID or slug" msgstr "UUID ou Slug du produit" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Créer un produit" @@ -949,7 +941,8 @@ msgstr "Supprimer une promotion" #: engine/core/docs/drf/viewsets.py:1169 msgid "rewrite an existing promotion saving non-editables" msgstr "" -"Réécrire une promotion existante en sauvegardant les éléments non modifiables" +"Réécrire une promotion existante en sauvegardant les éléments non " +"modifiables" #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" @@ -1004,8 +997,8 @@ msgstr "Supprimer une étiquette de produit" #: engine/core/docs/drf/viewsets.py:1259 msgid "rewrite an existing product tag saving non-editables" msgstr "" -"Réécrire une étiquette de produit existante en sauvegardant les éléments non " -"modifiables" +"Réécrire une étiquette de produit existante en sauvegardant les éléments non" +" modifiables" #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" @@ -1143,310 +1136,311 @@ msgstr "Niveau" msgid "Product UUID" msgstr "UUID du produit" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Clé à rechercher ou à insérer dans la cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Données à stocker dans la mémoire cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Délai d'attente en secondes pour placer les données dans le cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Données mises en cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Données JSON camélisées provenant de l'URL demandée" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Seuls les URL commençant par http(s):// sont autorisés." -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Ajouter un produit à la commande" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} introuvable !" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Supprimer tous les produits de la commande" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Acheter une commande" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Veuillez fournir soit order_uuid, soit order_hr_id - les deux s'excluent " "mutuellement !" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Le mauvais type provient de la méthode order.buy() : {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Effectuer une action sur une liste de produits dans la commande" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Supprimer/Ajouter" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "L'action doit être soit \"ajouter\", soit \"supprimer\" !" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "" "Effectuer une action sur une liste de produits dans la liste de souhaits" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Veuillez indiquer la valeur de `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} introuvable !" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Ajouter un produit à la commande" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Acheter une commande" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Veuillez envoyer les attributs sous la forme d'une chaîne formatée comme " "attr1=valeur1,attr2=valeur2." -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "L'action doit être soit `add` soit `remove` !" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Le produit {order_product_uuid} n'a pas été trouvé !" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Chaîne d'adresse originale fournie par l'utilisateur" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "La limite doit être comprise entre 1 et 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fonctionne comme un charme" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Attributs" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Attributs groupés" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groupes d'attributs" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Catégories" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Marques" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Catégories" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quels attributs et valeurs peuvent être utilisés pour filtrer cette " "catégorie." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Prix minimum et maximum pour les produits de cette catégorie, s'ils sont " "disponibles." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags pour cette catégorie" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produits dans cette catégorie" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendeurs" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (coordonnée Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (coordonnée X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Comment" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valeur d'évaluation de 1 à 10 inclus, ou 0 si elle n'est pas définie." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Représente le retour d'information d'un utilisateur." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Notifications" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL de téléchargement pour ce produit de la commande, le cas échéant" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Retour d'information" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Une liste des produits commandés dans cette commande" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Adresse de facturation" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -"Adresse d'expédition pour cette commande, laisser vide si elle est identique " -"à l'adresse de facturation ou si elle n'est pas applicable" +"Adresse d'expédition pour cette commande, laisser vide si elle est identique" +" à l'adresse de facturation ou si elle n'est pas applicable" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Prix total de la commande" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Quantité totale de produits dans la commande" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Tous les produits de la commande sont-ils numériques ?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transactions pour cette commande" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Commandes" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Image URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Images du produit" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Catégorie" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Retour d'information" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Marque" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Groupes d'attributs" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1454,7 +1448,7 @@ msgstr "Groupes d'attributs" msgid "price" msgstr "Prix" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1462,39 +1456,39 @@ msgstr "Prix" msgid "quantity" msgstr "Quantité" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Nombre de retours d'information" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produits disponibles uniquement pour les commandes personnelles" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Prix d'escompte" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produits" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produits en vente" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promotions" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendeur" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1502,100 +1496,100 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Liste de souhaits" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produits marqués" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Étiquettes du produit" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Catégories marquées" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tags des catégories" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nom du projet" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Nom de l'entreprise" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Adresse de l'entreprise" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Numéro de téléphone de l'entreprise" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', parfois il doit être utilisé à la place de la valeur de " "l'utilisateur de l'hôte" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Utilisateur de l'hôte de messagerie" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Montant maximum du paiement" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Montant minimum pour le paiement" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Données analytiques" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configuration" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Code langue" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Nom de la langue" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Drapeau linguistique, s'il existe :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Obtenir la liste des langues prises en charge" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Résultats de la recherche de produits" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Résultats de la recherche de produits" @@ -1640,8 +1634,8 @@ msgid "" msgstr "" "Représente une entité fournisseur capable de stocker des informations sur " "les fournisseurs externes et leurs exigences en matière d'interaction. La " -"classe Vendeur est utilisée pour définir et gérer les informations relatives " -"à un fournisseur externe. Elle stocke le nom du fournisseur, les détails " +"classe Vendeur est utilisée pour définir et gérer les informations relatives" +" à un fournisseur externe. Elle stocke le nom du fournisseur, les détails " "d'authentification requis pour la communication et le pourcentage de " "majoration appliqué aux produits récupérés auprès du fournisseur. Ce modèle " "gère également des métadonnées et des contraintes supplémentaires, ce qui " @@ -1733,9 +1727,9 @@ msgid "" "attributes for an internal tag identifier and a user-friendly display name." msgstr "" "Représente une étiquette de catégorie utilisée pour les produits. Cette " -"classe modélise une balise de catégorie qui peut être utilisée pour associer " -"et classer des produits. Elle comprend des attributs pour un identifiant de " -"balise interne et un nom d'affichage convivial." +"classe modélise une balise de catégorie qui peut être utilisée pour associer" +" et classer des produits. Elle comprend des attributs pour un identifiant de" +" balise interne et un nom d'affichage convivial." #: engine/core/models.py:254 msgid "category tag" @@ -1762,8 +1756,8 @@ msgstr "" "avoir des relations hiérarchiques avec d'autres catégories, en prenant en " "charge les relations parent-enfant. La classe comprend des champs pour les " "métadonnées et la représentation visuelle, qui servent de base aux " -"fonctionnalités liées aux catégories. Cette classe est généralement utilisée " -"pour définir et gérer des catégories de produits ou d'autres regroupements " +"fonctionnalités liées aux catégories. Cette classe est généralement utilisée" +" pour définir et gérer des catégories de produits ou d'autres regroupements " "similaires au sein d'une application, permettant aux utilisateurs ou aux " "administrateurs de spécifier le nom, la description et la hiérarchie des " "catégories, ainsi que d'attribuer des attributs tels que des images, des " @@ -1819,13 +1813,14 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Représente un objet Marque dans le système. Cette classe gère les " "informations et les attributs liés à une marque, y compris son nom, ses " "logos, sa description, ses catégories associées, un nom unique et un ordre " -"de priorité. Elle permet d'organiser et de représenter les données relatives " -"à la marque dans l'application." +"de priorité. Elle permet d'organiser et de représenter les données relatives" +" à la marque dans l'application." #: engine/core/models.py:448 msgid "name of this brand" @@ -1869,8 +1864,8 @@ msgstr "Catégories" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1880,8 +1875,8 @@ msgstr "" "des détails sur la relation entre les fournisseurs, les produits et leurs " "informations de stock, ainsi que des propriétés liées à l'inventaire telles " "que le prix, le prix d'achat, la quantité, l'UGS et les actifs numériques. " -"Elle fait partie du système de gestion des stocks pour permettre le suivi et " -"l'évaluation des produits disponibles auprès de différents fournisseurs." +"Elle fait partie du système de gestion des stocks pour permettre le suivi et" +" l'évaluation des produits disponibles auprès de différents fournisseurs." #: engine/core/models.py:520 msgid "the vendor supplying this product stock" @@ -1960,8 +1955,8 @@ msgid "" "product data and its associated information within an application." msgstr "" "Représente un produit avec des attributs tels que la catégorie, la marque, " -"les étiquettes, l'état numérique, le nom, la description, le numéro de pièce " -"et l'étiquette. Fournit des propriétés utilitaires connexes pour récupérer " +"les étiquettes, l'état numérique, le nom, la description, le numéro de pièce" +" et l'étiquette. Fournit des propriétés utilitaires connexes pour récupérer " "les évaluations, le nombre de commentaires, le prix, la quantité et le " "nombre total de commandes. Conçue pour être utilisée dans un système de " "commerce électronique ou de gestion des stocks. Cette classe interagit avec " @@ -2023,14 +2018,14 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Représente un attribut dans le système. Cette classe est utilisée pour " "définir et gérer les attributs, qui sont des données personnalisables " -"pouvant être associées à d'autres entités. Les attributs sont associés à des " -"catégories, des groupes, des types de valeurs et des noms. Le modèle prend " +"pouvant être associées à d'autres entités. Les attributs sont associés à des" +" catégories, des groupes, des types de valeurs et des noms. Le modèle prend " "en charge plusieurs types de valeurs, notamment les chaînes de caractères, " "les entiers, les flottants, les booléens, les tableaux et les objets. Cela " "permet une structuration dynamique et flexible des données." @@ -2096,13 +2091,14 @@ msgstr "Attribut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"Représente une valeur spécifique pour un attribut lié à un produit. Il relie " -"l'\"attribut\" à une \"valeur\" unique, ce qui permet une meilleure " -"organisation et une représentation dynamique des caractéristiques du produit." +"Représente une valeur spécifique pour un attribut lié à un produit. Il relie" +" l'\"attribut\" à une \"valeur\" unique, ce qui permet une meilleure " +"organisation et une représentation dynamique des caractéristiques du " +"produit." #: engine/core/models.py:788 msgid "attribute of this value" @@ -2119,16 +2115,16 @@ msgstr "La valeur spécifique de cet attribut" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" -"Représente une image de produit associée à un produit dans le système. Cette " -"classe est conçue pour gérer les images des produits, y compris la " +"Représente une image de produit associée à un produit dans le système. Cette" +" classe est conçue pour gérer les images des produits, y compris la " "fonctionnalité de téléchargement des fichiers d'image, leur association à " -"des produits spécifiques et la détermination de leur ordre d'affichage. Elle " -"comprend également une fonction d'accessibilité avec un texte alternatif " +"des produits spécifiques et la détermination de leur ordre d'affichage. Elle" +" comprend également une fonction d'accessibilité avec un texte alternatif " "pour les images." #: engine/core/models.py:826 @@ -2169,8 +2165,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Représente une campagne promotionnelle pour des produits avec une remise. " "Cette classe est utilisée pour définir et gérer des campagnes " @@ -2223,7 +2219,8 @@ msgstr "" "gestion des produits souhaités. La classe fournit des fonctionnalités " "permettant de gérer une collection de produits, en prenant en charge des " "opérations telles que l'ajout et la suppression de produits, ainsi que des " -"opérations permettant d'ajouter et de supprimer plusieurs produits à la fois." +"opérations permettant d'ajouter et de supprimer plusieurs produits à la " +"fois." #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2247,11 +2244,11 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"Représente un enregistrement documentaire lié à un produit. Cette classe est " -"utilisée pour stocker des informations sur les documentaires liés à des " +"Représente un enregistrement documentaire lié à un produit. Cette classe est" +" utilisée pour stocker des informations sur les documentaires liés à des " "produits spécifiques, y compris les téléchargements de fichiers et leurs " "métadonnées. Elle contient des méthodes et des propriétés permettant de " "gérer le type de fichier et le chemin de stockage des fichiers " @@ -2272,24 +2269,24 @@ msgstr "Non résolu" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Représente une entité d'adresse qui comprend des détails de localisation et " "des associations avec un utilisateur. Elle fournit des fonctionnalités de " "stockage de données géographiques et d'adresses, ainsi qu'une intégration " "avec des services de géocodage. Cette classe est conçue pour stocker des " -"informations détaillées sur les adresses, y compris des éléments tels que la " -"rue, la ville, la région, le pays et la géolocalisation (longitude et " +"informations détaillées sur les adresses, y compris des éléments tels que la" +" rue, la ville, la région, le pays et la géolocalisation (longitude et " "latitude). Elle prend en charge l'intégration avec les API de géocodage, ce " -"qui permet de stocker les réponses brutes de l'API en vue d'un traitement ou " -"d'une inspection ultérieurs. La classe permet également d'associer une " +"qui permet de stocker les réponses brutes de l'API en vue d'un traitement ou" +" d'une inspection ultérieurs. La classe permet également d'associer une " "adresse à un utilisateur, ce qui facilite le traitement personnalisé des " "données." @@ -2356,8 +2353,8 @@ msgid "" msgstr "" "Représente un code promotionnel qui peut être utilisé pour des remises, en " "gérant sa validité, le type de remise et l'application. La classe PromoCode " -"stocke les détails d'un code promotionnel, notamment son identifiant unique, " -"les propriétés de la remise (montant ou pourcentage), la période de " +"stocke les détails d'un code promotionnel, notamment son identifiant unique," +" les propriétés de la remise (montant ou pourcentage), la période de " "validité, l'utilisateur associé (le cas échéant) et l'état de son " "utilisation. Elle comprend une fonctionnalité permettant de valider et " "d'appliquer le code promotionnel à une commande tout en veillant à ce que " @@ -2365,7 +2362,8 @@ msgstr "" #: engine/core/models.py:1087 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" +msgstr "" +"Code unique utilisé par un utilisateur pour bénéficier d'une réduction" #: engine/core/models.py:1088 msgid "promo code identifier" @@ -2373,7 +2371,8 @@ msgstr "Identifiant du code promotionnel" #: engine/core/models.py:1095 msgid "fixed discount amount applied if percent is not used" -msgstr "Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé" +msgstr "" +"Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé" #: engine/core/models.py:1096 msgid "fixed discount amount" @@ -2381,7 +2380,8 @@ msgstr "Montant de l'escompte fixe" #: engine/core/models.py:1102 msgid "percentage discount applied if fixed amount is not used" -msgstr "Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé" +msgstr "" +"Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé" #: engine/core/models.py:1103 msgid "percentage discount" @@ -2406,8 +2406,8 @@ msgstr "Heure de début de validité" #: engine/core/models.py:1120 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é." +"Date à laquelle le code promotionnel a été utilisé, vide s'il n'a pas encore" +" été utilisé." #: engine/core/models.py:1121 msgid "usage timestamp" @@ -2450,18 +2450,18 @@ msgstr "Type de réduction non valide pour le code promo {self.uuid} !" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" -"Représente une commande passée par un utilisateur. Cette classe modélise une " -"commande dans l'application, y compris ses différents attributs tels que les " -"informations de facturation et d'expédition, le statut, l'utilisateur " -"associé, les notifications et les opérations connexes. Les commandes peuvent " -"être associées à des produits, des promotions peuvent être appliquées, des " -"adresses peuvent être définies et les détails d'expédition ou de facturation " -"peuvent être mis à jour. De même, la fonctionnalité permet de gérer les " +"Représente une commande passée par un utilisateur. Cette classe modélise une" +" commande dans l'application, y compris ses différents attributs tels que " +"les informations de facturation et d'expédition, le statut, l'utilisateur " +"associé, les notifications et les opérations connexes. Les commandes peuvent" +" être associées à des produits, des promotions peuvent être appliquées, des " +"adresses peuvent être définies et les détails d'expédition ou de facturation" +" peuvent être mis à jour. De même, la fonctionnalité permet de gérer les " "produits dans le cycle de vie de la commande." #: engine/core/models.py:1213 @@ -2537,7 +2537,8 @@ msgstr "Un utilisateur ne peut avoir qu'un seul ordre en cours à la fois !" #: engine/core/models.py:1351 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." +"Vous ne pouvez pas ajouter de produits à une commande qui n'est pas en " +"cours." #: engine/core/models.py:1356 msgid "you cannot add inactive products to order" @@ -2644,7 +2645,8 @@ msgid "feedback comments" msgstr "Commentaires" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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." @@ -2673,16 +2675,17 @@ msgid "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." msgstr "" -"Représente les produits associés aux commandes et leurs attributs. Le modèle " -"OrderProduct conserve les informations relatives à un produit faisant partie " -"d'une commande, y compris des détails tels que le prix d'achat, la quantité, " -"les attributs du produit et le statut. Il gère les notifications destinées à " -"l'utilisateur et aux administrateurs, ainsi que des opérations telles que le " -"renvoi du solde du produit ou l'ajout de commentaires. Ce modèle fournit " -"également des méthodes et des propriétés qui prennent en charge la logique " -"commerciale, comme le calcul du prix total ou la génération d'une URL de " -"téléchargement pour les produits numériques. Le modèle s'intègre aux modèles " -"de commande et de produit et stocke une référence à ces derniers." +"Représente les produits associés aux commandes et leurs attributs. Le modèle" +" OrderProduct conserve les informations relatives à un produit faisant " +"partie d'une commande, y compris des détails tels que le prix d'achat, la " +"quantité, les attributs du produit et le statut. Il gère les notifications " +"destinées à l'utilisateur et aux administrateurs, ainsi que des opérations " +"telles que le renvoi du solde du produit ou l'ajout de commentaires. Ce " +"modèle fournit également des méthodes et des propriétés qui prennent en " +"charge la logique commerciale, comme le calcul du prix total ou la " +"génération d'une URL de téléchargement pour les produits numériques. Le " +"modèle s'intègre aux modèles de commande et de produit et stocke une " +"référence à ces derniers." #: engine/core/models.py:1757 msgid "the price paid by the customer for this product at purchase time" @@ -2694,7 +2697,8 @@ msgstr "Prix d'achat au moment de la commande" #: engine/core/models.py:1763 msgid "internal comments for admins about this ordered product" -msgstr "Commentaires internes pour les administrateurs sur ce produit commandé" +msgstr "" +"Commentaires internes pour les administrateurs sur ce produit commandé" #: engine/core/models.py:1764 msgid "internal comments" @@ -2792,9 +2796,9 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Représente la fonctionnalité de téléchargement des ressources numériques " "associées aux commandes. La classe DigitalAssetDownload permet de gérer et " @@ -2860,8 +2864,7 @@ msgstr "Bonjour %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Merci pour votre commande #%(order.pk)s ! Nous avons le plaisir de vous " @@ -2976,8 +2979,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Nous vous remercions pour votre commande ! Nous avons le plaisir de " @@ -3016,28 +3018,28 @@ msgstr "Les données et le délai d'attente sont tous deux nécessaires" #: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -"La valeur du délai d'attente n'est pas valide, elle doit être comprise entre " -"0 et 216000 secondes." +"La valeur du délai d'attente n'est pas valide, elle doit être comprise entre" +" 0 et 216000 secondes." #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | nous contacter initié" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | nous contacter initié" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmation de commande" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmation de commande" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Commande livrée" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | commande livrée" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode accordé" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode accordé" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3069,8 +3071,8 @@ msgid "" "Content-Type header for XML." msgstr "" "Gère la réponse détaillée d'un plan du site. Cette fonction traite la " -"demande, récupère la réponse détaillée appropriée du plan du site et définit " -"l'en-tête Content-Type pour XML." +"demande, récupère la réponse détaillée appropriée du plan du site et définit" +" l'en-tête Content-Type pour XML." #: engine/core/views.py:123 msgid "" @@ -3114,15 +3116,10 @@ msgstr "Gère la logique de l'achat en tant qu'entreprise sans enregistrement." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gère le téléchargement d'un bien numérique associé à une commande.\n" -"Cette fonction tente de servir le fichier de ressource numérique situé dans " -"le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une " -"erreur HTTP 404 est générée pour indiquer que la ressource n'est pas " -"disponible." +"Cette fonction tente de servir le fichier de ressource numérique situé dans le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3151,31 +3148,27 @@ msgstr "favicon introuvable" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gère les demandes de favicon d'un site web.\n" -"Cette fonction tente de servir le fichier favicon situé dans le répertoire " -"statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP " -"404 est générée pour indiquer que la ressource n'est pas disponible." +"Cette fonction tente de servir le fichier favicon situé dans le répertoire statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Redirige la requête vers la page d'index de l'interface d'administration. " -"Cette fonction gère les requêtes HTTP entrantes et les redirige vers la page " -"d'index de l'interface d'administration de Django. Elle utilise la fonction " -"`redirect` de Django pour gérer la redirection HTTP." +"Cette fonction gère les requêtes HTTP entrantes et les redirige vers la page" +" d'index de l'interface d'administration de Django. Elle utilise la fonction" +" `redirect` de Django pour gérer la redirection HTTP." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "Renvoie la version actuelle d'eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3190,12 +3183,13 @@ msgstr "" "l'action en cours, les autorisations personnalisables et les formats de " "rendu." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Représente un jeu de vues pour la gestion des objets AttributeGroup. Gère " "les opérations liées à l'AttributeGroup, notamment le filtrage, la " @@ -3203,7 +3197,7 @@ msgstr "" "couche API de l'application et fournit un moyen normalisé de traiter les " "demandes et les réponses concernant les données de l'AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3220,21 +3214,22 @@ msgstr "" "récupération d'informations détaillées ou simplifiées en fonction de la " "demande." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"Un viewset pour la gestion des objets AttributeValue. Ce viewset fournit des " -"fonctionnalités pour lister, récupérer, créer, mettre à jour et supprimer " +"Un viewset pour la gestion des objets AttributeValue. Ce viewset fournit des" +" fonctionnalités pour lister, récupérer, créer, mettre à jour et supprimer " "des objets AttributeValue. Il s'intègre aux mécanismes de viewset du cadre " "REST de Django et utilise les sérialiseurs appropriés pour les différentes " -"actions. Les capacités de filtrage sont fournies par le backend DjangoFilter." +"actions. Les capacités de filtrage sont fournies par le backend " +"DjangoFilter." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3243,13 +3238,13 @@ msgid "" "can access specific data." msgstr "" "Gère les vues pour les opérations liées à la catégorie. La classe " -"CategoryViewSet est responsable de la gestion des opérations liées au modèle " -"Category dans le système. Elle permet d'extraire, de filtrer et de " +"CategoryViewSet est responsable de la gestion des opérations liées au modèle" +" Category dans le système. Elle permet d'extraire, de filtrer et de " "sérialiser les données relatives aux catégories. Le jeu de vues applique " "également des permissions pour s'assurer que seuls les utilisateurs " "autorisés peuvent accéder à des données spécifiques." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3258,11 +3253,11 @@ msgid "" msgstr "" "Représente un jeu de vues pour la gestion des instances de marque. Cette " "classe fournit des fonctionnalités d'interrogation, de filtrage et de " -"sérialisation des objets Brand. Elle utilise le cadre ViewSet de Django pour " -"simplifier la mise en œuvre des points d'extrémité de l'API pour les objets " -"Brand." +"sérialisation des objets Brand. Elle utilise le cadre ViewSet de Django pour" +" simplifier la mise en œuvre des points d'extrémité de l'API pour les objets" +" Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3277,10 +3272,10 @@ msgstr "" "sérialisation et les opérations sur des instances spécifiques. Elle s'étend " "à partir de `EvibesViewSet` pour utiliser des fonctionnalités communes et " "s'intègre au framework REST de Django pour les opérations API RESTful. Il " -"comprend des méthodes pour récupérer les détails d'un produit, appliquer des " -"permissions et accéder aux commentaires connexes d'un produit." +"comprend des méthodes pour récupérer les détails d'un produit, appliquer des" +" permissions et accéder aux commentaires connexes d'un produit." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3288,21 +3283,21 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"Représente un jeu de vues pour la gestion des objets Vendeur. Ce jeu de vues " -"permet d'extraire, de filtrer et de sérialiser les données relatives aux " +"Représente un jeu de vues pour la gestion des objets Vendeur. Ce jeu de vues" +" permet d'extraire, de filtrer et de sérialiser les données relatives aux " "vendeurs. Il définit l'ensemble de requêtes, les configurations de filtrage " "et les classes de sérialisation utilisées pour gérer les différentes " "actions. L'objectif de cette classe est de fournir un accès simplifié aux " "ressources relatives aux vendeurs par l'intermédiaire du cadre REST de " "Django." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Représentation d'un ensemble de vues gérant des objets de retour " @@ -3314,14 +3309,14 @@ msgstr "" "la classe de base `EvibesViewSet` et utilise le système de filtrage de " "Django pour l'interrogation des données." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet pour la gestion des commandes et des opérations connexes. Cette " @@ -3334,26 +3329,26 @@ msgstr "" "autorisations en conséquence lors de l'interaction avec les données de la " "commande." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Fournit un jeu de vues pour la gestion des entités OrderProduct. Ce jeu de " "vues permet d'effectuer des opérations CRUD et des actions personnalisées " "spécifiques au modèle OrderProduct. Il inclut le filtrage, les contrôles de " -"permission et le changement de sérialiseur en fonction de l'action demandée. " -"En outre, il fournit une action détaillée pour gérer le retour " +"permission et le changement de sérialiseur en fonction de l'action demandée." +" En outre, il fournit une action détaillée pour gérer le retour " "d'informations sur les instances OrderProduct." -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Gère les opérations liées aux images des produits dans l'application." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3361,20 +3356,20 @@ msgstr "" "Gère la récupération et le traitement des instances de PromoCode par le " "biais de diverses actions API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Représente un jeu de vues pour la gestion des promotions." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Gère les opérations liées aux données de stock dans le système." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3382,14 +3377,14 @@ msgstr "" "Jeu de vues pour la gestion des opérations de la liste de souhaits. Le jeu " "de vues WishlistViewSet fournit des points d'extrémité pour interagir avec " "la liste de souhaits d'un utilisateur, permettant la récupération, la " -"modification et la personnalisation des produits de la liste de souhaits. Ce " -"jeu de vues facilite les fonctionnalités telles que l'ajout, la suppression " -"et les actions en bloc pour les produits de la liste de souhaits. Des " +"modification et la personnalisation des produits de la liste de souhaits. Ce" +" jeu de vues facilite les fonctionnalités telles que l'ajout, la suppression" +" et les actions en bloc pour les produits de la liste de souhaits. Des " "contrôles de permissions sont intégrés pour s'assurer que les utilisateurs " "ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions " "explicites sont accordées." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3398,18 +3393,18 @@ msgid "" "on the request context." msgstr "" "Cette classe fournit une fonctionnalité de viewset pour la gestion des " -"objets `Address`. La classe AddressViewSet permet d'effectuer des opérations " -"CRUD, des filtrages et des actions personnalisées liées aux entités adresse. " -"Elle inclut des comportements spécialisés pour différentes méthodes HTTP, " -"des dérogations au sérialiseur et une gestion des autorisations basée sur le " -"contexte de la demande." +"objets `Address`. La classe AddressViewSet permet d'effectuer des opérations" +" CRUD, des filtrages et des actions personnalisées liées aux entités " +"adresse. Elle inclut des comportements spécialisés pour différentes méthodes" +" HTTP, des dérogations au sérialiseur et une gestion des autorisations basée" +" sur le contexte de la demande." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.mo b/engine/core/locale/he_IL/LC_MESSAGES/django.mo index a8bd344212daae755a6508eb9bc1d8eba3e26c4c..9ec719127484d85dae8a8c8ceae6e070c3ee9926 100644 GIT binary patch delta 5461 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 delta 5428 zcmX}v2~?I<9>?+fylR=btYdceQb;+*bdL4I#7kXvC%Qx;9+b){3)KJBjp%N zyz_)H^YBOPj$=<6lTAa}xQ@8aX=6I!3#VOU3MlNQVmMCu)LMX#5nsnJY?otX7RIJC^_!0KS!^nT8hW}{>D!#FCgUhxr z9j>@SnfNMpq(cGU8IwXBU1>}UmSXEwV|qBO|AFhq+~Pvj561ij|ML?Y2p8XA{qb5A zZ{vY&%;O)#+ka(=c;TDB8}mJvZv0`)GV05#Sx@T6-ZiEl^H9LHS5 z|N0yg!uu}NMxV<%-tU-r9_(1pF=uf>eaE!K=thpY%mZVaIA%OAj0kZ2YyW2)Ond-a zqpz9cUz)b4EQrM37>hBu!mHooS?u{S&Zm8Ik-{k&>eJk@d!VJ`Uy5*S!S$Y=3HU4> zOT;(vYAeSKHJ0U$Dc*;&ekj7meyr0_ypBsDUg)HM9nG-)2<$ z?m#Wo1($-Bz&z@hZqOZdGR;N3a6LA}*HD}3Jyd#K$6&mLy03MJV;W&NcEC7P2j-(X zl!h9>S}!j2boWqrhzrM2Bdb7ds@tfB`gO81Gz2x`DX0#mdvUhs7HmxYK2(Q3L5=(} z>bb_eTi*>{8`-h@tV0<|FKa9c_DzsZGQB!scXJVV~cEl@D4Q)a- z@D8@a-CleS)lfO=JwKy9(|1ry5*gu`OPGbaK0VUTXi_Bkud{tE75e&pfm5*@7humG zj{jrwH&nxAs5HESTGMtt?e(!ZjW`F@v1_Oqcp%E|{$NyE_D3yYA}asaxD+xd?7$=p z?#0&%b5Kk169(dK)RMH0w((NbNb*qW^%}b|)+8dsyflJ3V8 zGy`?}*c+$gB;pL5gP)>C-ZjQU8wV8FX})#gUx8)d`&?wzKL4XhX&eo3q~Ea{V*OAP$SC0EIfspxnYCs z!IFyq2#}&qUkW3_w7+>G92|2D-|`8 zB2+^MQB(g3PQ(g~#va4%%%q|kdK-t~FW3cRM%b)MLcQ-KY5?a)kpEh%->Fao&PW?K zMD?&Gs=+YSNa9gP@^n= zxXwhI|BEn4`TsfvZMI{mkvurbj=UWz-TLA{%s`D~KWe1a-t~ydHcmy|{|1i33a`HV z6vqr9PQrM64->EoqiEm6K5lpMa@5c8ov0UGK{fcuRNH}Bs23HYruZ6;!iZ`1D1HXh zh)?2t>@(fY#6M8Knje^9zcFbzhqw&gBnmMz?Fse5iY!yMaCHf|uU#7s<|>zHh;!Yo`i&w3Np!KH~d{&ynzzm|%``HoqGm6(gkPdH{J zR->*jUtqtIw^0qGEwr2VXVhj5O|n@s0k!K_qv~@}>9-&C{`06Mo|J4&PWJLYlM3bc zI_!zBp*H0gsL$kOT!QWXWOwh2sC3Fl-M1C>dtevpguLu|7xndPwaET12ti#Ric0H5 zmx9)G1IFPwd<6qi?ApD9+7kh(cCCk@9^8mJ>kp#7X7v`^`v#!0Ap^BZU&jGhhT2PQ zm)MTZL|u1tDCmJ>7>QM=qc!+RyXjV;8aRlWiC->9j@_{u z_47S!sr{Huz}Cd`kb%12=&@yX1anc@l8-vD z&ZCy(2I_}RHMYgk%kA?isNWCUvA^=al7jLvHG<5j9=u{nSEj&Zkgo z_!17p&v6DeTV)$aLp5*;2VwKoc5hAdEWlCJUq!8b)YF`ZZ&OI6ptWt0>Hke;CZb-H zjoQ^`Fa>K+Q=gJ$kLE%QBR=a{gYm>+WR<=ZOE3rvi+Xp8beuJLsi84G*O#{~w6%|) zuE#^SX~+2gHKaoSvWwPqo?XkA<;(jvY@2S%>AKFB=__i{t*jPd(Jv9NI=*LoML9io zuD>sF$>Igc3-kV39CELCpg8zm@mg{Fd&Pi~4tX)f!;7LymLK%$Hq~{V(0k?HuG8sW YnG@mv<;|`Wv+1iW=b=r9vz&ha1N+(=82|tP diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.po b/engine/core/locale/he_IL/LC_MESSAGES/django.po index 3c6b46ac..66497b1c 100644 --- a/engine/core/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/core/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -27,7 +27,8 @@ msgstr "פעיל" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "אם מוגדר כ-false, אובייקט זה לא יהיה גלוי למשתמשים ללא ההרשאה הנדרשת." #: engine/core/abstract.py:23 engine/core/choices.py:18 @@ -46,89 +47,89 @@ msgstr "משונה" msgid "when the object was last modified" msgstr "מתי האובייקט נערך לאחרונה" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "תרגומים" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "כללי" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "יחסים" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "מידע נוסף" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "מטא-נתונים" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "חותמות זמן" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "הפעל את %(verbose_name_plural)s שנבחר" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "הפריטים שנבחרו הופעלו!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "השבת את %(verbose_name_plural)s שנבחר" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "פריטים נבחרים הושבתו!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "ערך התכונה" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "ערכי תכונות" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "תמונה" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "תמונות" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "מלאי" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "מניות" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "הזמן מוצר" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "הזמנת מוצרים" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "ילדים" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "תצורה" @@ -152,7 +153,8 @@ msgstr "נמסר" msgid "canceled" msgstr "בוטל" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "נכשל" @@ -193,7 +195,7 @@ msgstr "" "סכימת OpenApi3 עבור ממשק API זה. ניתן לבחור את הפורמט באמצעות משא ומתן על " "תוכן. ניתן לבחור את השפה באמצעות Accept-Language ופרמטר שאילתה." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "קלט/פלט מטמון" @@ -217,7 +219,7 @@ msgstr "קבל את הפרמטרים החשופים של היישום" msgid "send a message to the support team" msgstr "שלח הודעה לצוות התמיכה" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "בקש כתובת URL של CORS. מותר להשתמש רק ב-https." @@ -265,7 +267,8 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "שכתוב קבוצת תכונות קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "שכתוב שדות מסוימים בקבוצת תכונות קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" @@ -314,7 +317,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "שכתוב ערך תכונה קיים תוך שמירת תכונות שאינן ניתנות לעריכה" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "שכתוב שדות מסוימים של ערך תכונה קיים תוך שמירת שדות שאינם ניתנים לעריכה" @@ -348,9 +352,9 @@ msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך ש #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "תמונת מצב SEO Meta" @@ -368,8 +372,8 @@ msgstr "למשתמשים שאינם אנשי צוות, מוצגות רק ההז #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "חיפוש תת-מחרוזת ללא הבחנה בין אותיות גדולות וקטנות ב-human_readable_id, " "order_products.product.name ו-order_products.product.partnumber" @@ -407,9 +411,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "מיין לפי אחד מהפרמטרים הבאים: uuid, human_readable_id, user_email, user, " "status, created, modified, buy_time, random. הוסף קידומת '-' עבור מיון יורד " @@ -453,8 +457,8 @@ msgid "" "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -"מסיים את רכישת ההזמנה. אם נעשה שימוש ב-`force_balance`, הרכישה תושלם באמצעות " -"היתרה של המשתמש; אם נעשה שימוש ב-`force_payment`, תתבצע עסקה." +"מסיים את רכישת ההזמנה. אם נעשה שימוש ב-`force_balance`, הרכישה תושלם באמצעות" +" היתרה של המשתמש; אם נעשה שימוש ב-`force_payment`, תתבצע עסקה." #: engine/core/docs/drf/viewsets.py:397 msgid "retrieve current pending order of a user" @@ -464,7 +468,7 @@ msgstr "איתור הזמנה מושהית נוכחית של משתמש" msgid "retrieves a current pending order of an authenticated user" msgstr "מאתר הזמנה ממתנה נוכחית של משתמש מאומת" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "לרכוש הזמנה ללא יצירת חשבון" @@ -511,7 +515,8 @@ msgstr "הסר מוצר מההזמנה, הכמויות לא ייספרו" msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" -msgstr "מסיר רשימת מוצרים מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." +msgstr "" +"מסיר רשימת מוצרים מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." #: engine/core/docs/drf/viewsets.py:459 msgid "list all wishlists (simple view)" @@ -590,28 +595,15 @@ msgstr "מסיר מוצרים רבים מרשימת המשאלות באמצעו msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" -"סינון לפי זוגות שם/ערך של תכונה אחת או יותר. • **תחביר**: `attr_name=method-" -"value[;attr2=method2-value2]…` • **שיטות** (ברירת המחדל היא `icontains` אם " -"לא צוין): `iexact`, `exact`, `icontains`, `contains`, `isnull`, " -"`startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, " -"`lt`, `lte`, `gt`, `gte`, `in` • **הקלדת ערכים**: תחילה מתבצע ניסיון JSON " -"(כך שניתן להעביר רשימות/מילונים), `true`/`false` עבור ערכי בוליאניים, מספרים " -"שלמים, מספרים צפים; אחרת מטופל כמחרוזת. • **Base64**: קידומת עם `b64-` כדי " -"לקודד את הערך הגולמי ב-base64 בטוח ל-URL. \n" -"דוגמאות: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" +"סינון לפי זוגות שם/ערך של תכונה אחת או יותר. • **תחביר**: `attr_name=method-value[;attr2=method2-value2]…` • **שיטות** (ברירת המחדל היא `icontains` אם לא צוין): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **הקלדת ערכים**: תחילה מתבצע ניסיון JSON (כך שניתן להעביר רשימות/מילונים), `true`/`false` עבור ערכי בוליאניים, מספרים שלמים, מספרים צפים; אחרת מטופל כמחרוזת. • **Base64**: קידומת עם `b64-` כדי לקודד את הערך הגולמי ב-base64 בטוח ל-URL. \n" +"דוגמאות: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" #: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 msgid "list all products (simple view)" @@ -623,12 +615,11 @@ msgstr "(מדויק) UUID של המוצר" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"רשימה של שדות למיון, מופרדים בפסיקים. קידומת `-` למיון יורד. **מותר:** uuid, " -"rating, name, slug, created, modified, price, random" +"רשימה של שדות למיון, מופרדים בפסיקים. קידומת `-` למיון יורד. **מותר:** uuid," +" rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -641,6 +632,9 @@ msgid "Product UUID or slug" msgstr "UUID או Slug של המוצר" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "צור מוצר" @@ -927,7 +921,8 @@ msgstr "שכתוב תגית מוצר קיימת תוך שמירת תוכן שא #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" -msgstr "שכתוב שדות מסוימים בתגית מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" +msgstr "" +"שכתוב שדות מסוימים בתגית מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" #: engine/core/elasticsearch/__init__.py:122 #: engine/core/elasticsearch/__init__.py:570 @@ -1057,297 +1052,298 @@ msgstr "רמה" msgid "Product UUID" msgstr "UUID של המוצר" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "מפתח לחיפוש או להגדרה במטמון" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "נתונים לאחסון במטמון" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "פסק זמן בשניות להגדרת הנתונים במטמון" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "נתונים במטמון" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "הוסף מוצר להזמנה" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ההזמנה {order_uuid} לא נמצאה!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "הסר את כל המוצרים מההזמנה" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "קנה הזמנה" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "בצע פעולה ברשימת המוצרים בהזמנה" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "הסר/הוסף" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "הפעולה חייבת להיות \"הוספה\" או \"הסרה\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "בצע פעולה ברשימת המוצרים ברשימת המשאלות" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "אנא ספק את הערך `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "רשימת המשאלות {wishlist_uuid} לא נמצאה!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "הוסף מוצר להזמנה" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "קנה הזמנה" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "אנא שלחו את התכונות כמחרוזת מעוצבת כך: attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "הוספה או מחיקה של משוב עבור המוצר שהוזמן" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "הפעולה חייבת להיות `add` או `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "המוצר {order_product_uuid} לא נמצא!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "הגבול חייב להיות בין 1 ל-10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - עובד כמו קסם" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "תכונות" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "תכונות מקובצות" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "קבוצות תכונות" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "קטגוריות" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "מותגים" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "קטגוריות" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "אחוז הסימון" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "אילו תכונות וערכים ניתן להשתמש בהם לסינון קטגוריה זו." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "מחירים מינימליים ומקסימליים עבור מוצרים בקטגוריה זו, אם זמינים." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "תגיות עבור קטגוריה זו" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "מוצרים בקטגוריה זו" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "ספקים" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "קו רוחב (קואורדינטת Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "אורך (קואורדינטת X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "איך" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "ערך דירוג בין 1 ל-10, כולל, או 0 אם לא הוגדר." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "מייצג משוב ממשתמש." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "הודעות" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "משוב" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "רשימת המוצרים בהזמנה זו" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "כתובת לחיוב" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" "כתובת משלוח עבור הזמנה זו, השאר ריק אם זהה לכתובת החיוב או אם לא רלוונטי" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "המחיר הכולל של הזמנה זו" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "כמות המוצרים הכוללת בהזמנה" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "עסקאות עבור הזמנה זו" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "הזמנות" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "כתובת URL של התמונה" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "תמונות המוצר" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "קטגוריה" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "משובים" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "מותג" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "קבוצות תכונות" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1355,7 +1351,7 @@ msgstr "קבוצות תכונות" msgid "price" msgstr "מחיר" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1363,39 +1359,39 @@ msgstr "מחיר" msgid "quantity" msgstr "כמות" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "מספר המשובים" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "מוצרים זמינים רק להזמנות אישיות" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "מחיר מוזל" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "מוצרים" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "קודי קידום מכירות" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "מוצרים במבצע" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "מבצעים" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "ספק" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1403,98 +1399,98 @@ msgstr "ספק" msgid "product" msgstr "מוצר" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "מוצרים ברשימת המשאלות" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "רשימות משאלות" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "מוצרים מתויגים" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "תגיות מוצר" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "קטגוריות מתויגות" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "תגיות קטגוריות" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "שם הפרויקט" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "שם החברה" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "כתובת החברה" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "מספר הטלפון של החברה" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', לעיתים יש להשתמש בו במקום בערך המשתמש המארח" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "משתמש מארח דוא\"ל" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "סכום מקסימלי לתשלום" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "סכום מינימום לתשלום" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "נתוני ניתוח" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "נתוני פרסום" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "תצורה" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "קוד שפה" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "שם השפה" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "דגל השפה, אם קיים :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "קבל רשימה של השפות הנתמכות" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "תוצאות חיפוש מוצרים" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "תוצאות חיפוש מוצרים" @@ -1591,8 +1587,8 @@ msgid "" msgstr "" "מייצג תגית מוצר המשמשת לסיווג או זיהוי מוצרים. מחלקת ProductTag נועדה לזהות " "ולסווג מוצרים באופן ייחודי באמצעות שילוב של מזהה תגית פנימי ושם תצוגה " -"ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית " -"של מטא-נתונים למטרות ניהוליות." +"ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית" +" של מטא-נתונים למטרות ניהוליות." #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1621,8 +1617,8 @@ msgid "" "attributes for an internal tag identifier and a user-friendly display name." msgstr "" "מייצג תווית קטגוריה המשמשת למוצרים. מחלקה זו מדגמת תווית קטגוריה שניתן " -"להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם " -"תצוגה ידידותי למשתמש." +"להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם" +" תצוגה ידידותי למשתמש." #: engine/core/models.py:254 msgid "category tag" @@ -1700,10 +1696,11 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"מייצג אובייקט מותג במערכת. מחלקה זו מטפלת במידע ובתכונות הקשורים למותג, כולל " -"שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " +"מייצג אובייקט מותג במערכת. מחלקה זו מטפלת במידע ובתכונות הקשורים למותג, כולל" +" שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " "ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." #: engine/core/models.py:448 @@ -1748,8 +1745,8 @@ msgstr "קטגוריות" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1837,11 +1834,11 @@ msgid "" "product data and its associated information within an application." msgstr "" "מייצג מוצר עם תכונות כגון קטגוריה, מותג, תגיות, סטטוס דיגיטלי, שם, תיאור, " -"מספר חלק ו-slug. מספק תכונות שירות נלוות לאחזור דירוגים, ספירת משובים, מחיר, " -"כמות והזמנות סה\"כ. מיועד לשימוש במערכת המטפלת במסחר אלקטרוני או בניהול " +"מספר חלק ו-slug. מספק תכונות שירות נלוות לאחזור דירוגים, ספירת משובים, מחיר," +" כמות והזמנות סה\"כ. מיועד לשימוש במערכת המטפלת במסחר אלקטרוני או בניהול " "מלאי. מחלקה זו מתקשרת עם מודלים נלווים (כגון קטגוריה, מותג ותגית מוצר) " -"ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא " -"משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." +"ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" +" משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." #: engine/core/models.py:585 msgid "category this product belongs to" @@ -1896,14 +1893,15 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "מייצג תכונה במערכת. מחלקה זו משמשת להגדרת תכונות ולניהולן. תכונות הן נתונים " -"הניתנים להתאמה אישית, שניתן לקשר לישויות אחרות. לתכונות יש קטגוריות, קבוצות, " -"סוגי ערכים ושמות משויכים. המודל תומך בסוגים רבים של ערכים, כולל מחרוזת, מספר " -"שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית וגמישה." +"הניתנים להתאמה אישית, שניתן לקשר לישויות אחרות. לתכונות יש קטגוריות, קבוצות," +" סוגי ערכים ושמות משויכים. המודל תומך בסוגים רבים של ערכים, כולל מחרוזת, " +"מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית " +"וגמישה." #: engine/core/models.py:733 msgid "group of this attribute" @@ -1964,9 +1962,9 @@ msgstr "תכונה" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "מייצג ערך ספציפי עבור תכונה המקושרת למוצר. הוא מקשר את ה\"תכונה\" ל\"ערך\" " "ייחודי, ומאפשר ארגון טוב יותר וייצוג דינמי של מאפייני המוצר." @@ -1986,8 +1984,8 @@ msgstr "הערך הספציפי עבור תכונה זו" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2033,8 +2031,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "מייצג קמפיין קידום מכירות למוצרים בהנחה. מחלקה זו משמשת להגדרת וניהול " "קמפיינים לקידום מכירות המציעים הנחה באחוזים על מוצרים. המחלקה כוללת תכונות " @@ -2106,8 +2104,8 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "מייצג תיעוד הקשור למוצר. מחלקה זו משמשת לאחסון מידע על תיעוד הקשור למוצרים " "ספציפיים, כולל העלאת קבצים ומטא-נתונים שלהם. היא מכילה שיטות ותכונות לטיפול " @@ -2128,21 +2126,22 @@ msgstr "לא פתור" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "מייצג ישות כתובת הכוללת פרטים על מיקום וקשרים עם משתמש. מספק פונקציונליות " "לאחסון נתונים גיאוגרפיים וכתובות, וכן אינטגרציה עם שירותי קידוד גיאוגרפי. " -"מחלקה זו נועדה לאחסן מידע מפורט על כתובות, כולל רכיבים כגון רחוב, עיר, אזור, " -"מדינה ומיקום גיאוגרפי (קו אורך וקו רוחב). היא תומכת באינטגרציה עם ממשקי API " -"לקידוד גיאוגרפי, ומאפשרת אחסון של תגובות API גולמיות לעיבוד או בדיקה נוספים. " -"הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים אישית." +"מחלקה זו נועדה לאחסן מידע מפורט על כתובות, כולל רכיבים כגון רחוב, עיר, אזור," +" מדינה ומיקום גיאוגרפי (קו אורך וקו רוחב). היא תומכת באינטגרציה עם ממשקי API" +" לקידוד גיאוגרפי, ומאפשרת אחסון של תגובות API גולמיות לעיבוד או בדיקה " +"נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " +"אישית." #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2208,8 +2207,8 @@ msgstr "" "מייצג קוד קידום מכירות שניתן להשתמש בו לקבלת הנחות, לניהול תוקפו, סוג ההנחה " "והשימוש בו. מחלקת PromoCode מאחסנת פרטים אודות קוד קידום מכירות, כולל המזהה " "הייחודי שלו, מאפייני ההנחה (סכום או אחוז), תקופת התוקף, המשתמש המשויך (אם " -"יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה, " -"תוך הקפדה על עמידה באילוצים." +"יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," +" תוך הקפדה על עמידה באילוצים." #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" @@ -2295,16 +2294,16 @@ msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {s msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "מייצג הזמנה שבוצעה על ידי משתמש. מחלקה זו מדמה הזמנה בתוך היישום, כולל " "תכונותיה השונות כגון פרטי חיוב ומשלוח, סטטוס, משתמש קשור, התראות ופעולות " "נלוות. להזמנות יכולות להיות מוצרים נלווים, ניתן להחיל עליהן מבצעים, להגדיר " -"כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים " -"במחזור החיים של ההזמנה." +"כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים" +" במחזור החיים של ההזמנה." #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2458,8 +2457,8 @@ msgid "" msgstr "" "מנהל משוב משתמשים על מוצרים. מחלקה זו נועדה לאסוף ולאחסן משוב משתמשים על " "מוצרים ספציפיים שרכשו. היא מכילה תכונות לאחסון הערות משתמשים, הפניה למוצר " -"הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי " -"למדל ולנהל ביעילות נתוני משוב." +"הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי" +" למדל ולנהל ביעילות נתוני משוב." #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2470,7 +2469,8 @@ msgid "feedback comments" msgstr "הערות משוב" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." #: engine/core/models.py:1720 @@ -2497,8 +2497,8 @@ msgid "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." msgstr "" -"מייצג מוצרים הקשורים להזמנות ותכונותיהם. מודל OrderProduct שומר מידע על מוצר " -"שהוא חלק מהזמנה, כולל פרטים כגון מחיר הרכישה, כמות, תכונות המוצר ומצב. הוא " +"מייצג מוצרים הקשורים להזמנות ותכונותיהם. מודל OrderProduct שומר מידע על מוצר" +" שהוא חלק מהזמנה, כולל פרטים כגון מחיר הרכישה, כמות, תכונות המוצר ומצב. הוא " "מנהל התראות למשתמש ולמנהלים ומטפל בפעולות כגון החזרת יתרת המוצר או הוספת " "משוב. מודל זה מספק גם שיטות ותכונות התומכות בלוגיקה עסקית, כגון חישוב המחיר " "הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " @@ -2610,14 +2610,14 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "מייצג את פונקציונליות ההורדה של נכסים דיגיטליים הקשורים להזמנות. מחלקת " "DigitalAssetDownload מספקת את היכולת לנהל ולהיכנס להורדות הקשורות למוצרים " -"שהוזמנו. היא שומרת מידע על המוצר שהוזמן, מספר ההורדות והאם הנכס גלוי לציבור. " -"היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " +"שהוזמנו. היא שומרת מידע על המוצר שהוזמן, מספר ההורדות והאם הנכס גלוי לציבור." +" היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " "'הושלמה'." #: engine/core/models.py:1961 @@ -2674,12 +2674,11 @@ msgstr "שלום %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" -"תודה על הזמנתך #%(order.pk)s! אנו שמחים להודיע לך שהזמנתך נכנסה לעיבוד. להלן " -"פרטי הזמנתך:" +"תודה על הזמנתך #%(order.pk)s! אנו שמחים להודיע לך שהזמנתך נכנסה לעיבוד. להלן" +" פרטי הזמנתך:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2780,8 +2779,7 @@ msgstr "תודה על שהייתכם איתנו! הענקנו לכם קוד קי #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "תודה על הזמנתך! אנו שמחים לאשר את רכישתך. להלן פרטי הזמנתך:" @@ -2818,23 +2816,23 @@ msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בי #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | צור קשר יוזם" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | צור קשר יוזם" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | אישור הזמנה" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | אישור הזמנה" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | הזמנה נמסרה" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | הזמנה נמסרה" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | קוד קידום מכירות מוענק" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | קוד קידום מכירות מוענק" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2854,8 +2852,8 @@ msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -"מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול " -"את כותרת סוג התוכן המתאימה ל-XML." +"מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול" +" את כותרת סוג התוכן המתאימה ל-XML." #: engine/core/views.py:88 msgid "" @@ -2903,9 +2901,7 @@ msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "מטפל בהורדת נכס דיגיטלי הקשור להזמנה. פונקציה זו מנסה להציג את קובץ הנכס " "הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " @@ -2938,9 +2934,7 @@ msgstr "לא נמצא סמל מועדף" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "מטפל בבקשות לסמל המועדף של אתר אינטרנט. פונקציה זו מנסה להציג את קובץ הסמל " "המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " @@ -2948,19 +2942,19 @@ msgstr "" #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"מנתב את הבקשה לדף האינדקס של המנהל. הפונקציה מטפלת בבקשות HTTP נכנסות ומנתבת " -"אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` של " -"Django לטיפול בהפניה HTTP." +"מנתב את הבקשה לדף האינדקס של המנהל. הפונקציה מטפלת בבקשות HTTP נכנסות ומנתבת" +" אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " +"של Django לטיפול בהפניה HTTP." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "מחזיר את הגרסה הנוכחית של eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2968,24 +2962,25 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"מגדיר קבוצת תצוגות לניהול פעולות הקשורות ל-Evibes. מחלקת EvibesViewSet יורשת " -"מ-ModelViewSet ומספקת פונקציונליות לטיפול בפעולות ובפעולות על ישויות Evibes. " -"היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה הנוכחית, " -"הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד." +"מגדיר קבוצת תצוגות לניהול פעולות הקשורות ל-Evibes. מחלקת EvibesViewSet יורשת" +" מ-ModelViewSet ומספקת פונקציונליות לטיפול בפעולות ובפעולות על ישויות " +"Evibes. היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה " +"הנוכחית, הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "מייצג קבוצת תצוגות לניהול אובייקטי AttributeGroup. מטפל בפעולות הקשורות " "ל-AttributeGroup, כולל סינון, סידור סדרתי ואחזור נתונים. מחלקה זו היא חלק " "משכבת ה-API של היישום ומספקת דרך סטנדרטית לעיבוד בקשות ותגובות עבור נתוני " "AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2999,20 +2994,20 @@ msgstr "" "של אובייקטי Attribute, ומאפשרת שליטה דינמית על הנתונים המוחזרים, כגון סינון " "לפי שדות ספציפיים או אחזור מידע מפורט לעומת מידע מפושט, בהתאם לבקשה." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "סט תצוגה לניהול אובייקטי AttributeValue. סט תצוגה זה מספק פונקציונליות " "לרישום, אחזור, יצירה, עדכון ומחיקה של אובייקטי AttributeValue. הוא משתלב " "במנגנוני סט התצוגה של Django REST Framework ומשתמש בממירים מתאימים לפעולות " "שונות. יכולות סינון מסופקות באמצעות DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3025,7 +3020,7 @@ msgstr "" "וסידור נתוני קטגוריות. מערך התצוגות גם אוכף הרשאות כדי להבטיח שרק משתמשים " "מורשים יוכלו לגשת לנתונים ספציפיים." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3036,7 +3031,7 @@ msgstr "" "לשאילתה, סינון וסידור אובייקטים של מותג. היא משתמשת במערך ViewSet של Django " "כדי לפשט את היישום של נקודות קצה API לאובייקטים של מותג." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3046,13 +3041,13 @@ msgid "" "product details, applying permissions, and accessing related feedback of a " "product." msgstr "" -"מנהל פעולות הקשורות למודל `Product` במערכת. מחלקה זו מספקת מערך תצוגה לניהול " -"מוצרים, כולל סינון, סידור סדרתי ופעולות על מופעים ספציפיים. היא מרחיבה את " -"`EvibesViewSet` כדי להשתמש בפונקציונליות משותפת ומשתלבת עם מסגרת Django REST " -"עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה " +"מנהל פעולות הקשורות למודל `Product` במערכת. מחלקה זו מספקת מערך תצוגה לניהול" +" מוצרים, כולל סינון, סידור סדרתי ופעולות על מופעים ספציפיים. היא מרחיבה את " +"`EvibesViewSet` כדי להשתמש בפונקציונליות משותפת ומשתלבת עם מסגרת Django REST" +" עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה " "למשוב הקשור למוצר." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3061,48 +3056,48 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" "מייצג קבוצת תצוגות לניהול אובייקטי ספק. קבוצת תצוגות זו מאפשרת לאחזר, לסנן " -"ולסדר נתוני ספק. היא מגדירה את קבוצת השאילתות, תצורות המסננים ומחלקות הסידור " -"המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים " +"ולסדר נתוני ספק. היא מגדירה את קבוצת השאילתות, תצורות המסננים ומחלקות הסידור" +" המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים " "הקשורים לספק באמצעות מסגרת Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "ייצוג של קבוצת תצוגה המטפלת באובייקטי משוב. מחלקה זו מנהלת פעולות הקשורות " -"לאובייקטי משוב, כולל רישום, סינון ואחזור פרטים. מטרת קבוצת תצוגה זו היא לספק " -"סדרנים שונים לפעולות שונות וליישם טיפול מבוסס הרשאות באובייקטי משוב נגישים. " -"היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django לשאילתת " -"נתונים." +"לאובייקטי משוב, כולל רישום, סינון ואחזור פרטים. מטרת קבוצת תצוגה זו היא לספק" +" סדרנים שונים לפעולות שונות וליישם טיפול מבוסס הרשאות באובייקטי משוב נגישים." +" היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django " +"לשאילתת נתונים." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet לניהול הזמנות ופעולות נלוות. מחלקה זו מספקת פונקציונליות לאחזור, " -"שינוי וניהול אובייקטי הזמנה. היא כוללת נקודות קצה שונות לטיפול בפעולות הזמנה " -"כגון הוספה או הסרה של מוצרים, ביצוע רכישות עבור משתמשים רשומים ולא רשומים, " +"שינוי וניהול אובייקטי הזמנה. היא כוללת נקודות קצה שונות לטיפול בפעולות הזמנה" +" כגון הוספה או הסרה של מוצרים, ביצוע רכישות עבור משתמשים רשומים ולא רשומים, " "ואחזור הזמנות ממתנות של המשתמש המאושר הנוכחי. ViewSet משתמש במספר סדרנים " "בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " "הזמנה." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "מספק סט תצוגה לניהול ישויות OrderProduct. סט תצוגה זה מאפשר פעולות CRUD " @@ -3110,30 +3105,30 @@ msgstr "" "הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " "לטיפול במשוב על מופעים של OrderProduct." -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "מייצג קבוצת תצוגות לניהול מבצעים." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3145,7 +3140,7 @@ msgstr "" "שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " "מפורשות." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3158,12 +3153,12 @@ msgstr "" "לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " "סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/hi_IN/LC_MESSAGES/django.po b/engine/core/locale/hi_IN/LC_MESSAGES/django.po index f3940385..1463c6e9 100644 --- a/engine/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/core/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -49,89 +49,89 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "" @@ -194,7 +194,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -216,7 +216,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "" @@ -344,9 +344,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "" @@ -450,7 +450,7 @@ msgstr "" msgid "retrieves a current pending order of an authenticated user" msgstr "" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "" @@ -614,6 +614,9 @@ msgid "Product UUID or slug" msgstr "" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "" @@ -1026,296 +1029,296 @@ msgstr "" msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "" -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:204 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1323,7 +1326,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1331,39 +1334,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1371,98 +1374,98 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "" @@ -2693,22 +2696,22 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" +msgid "{settings.PROJECT_NAME} | contact us initiated" msgstr "" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" +msgid "{settings.PROJECT_NAME} | order confirmation" msgstr "" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" +msgid "{settings.PROJECT_NAME} | order delivered" msgstr "" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" msgstr "" #: engine/core/utils/messages.py:3 @@ -2821,7 +2824,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2830,7 +2833,7 @@ msgid "" "and rendering formats." msgstr "" -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2838,7 +2841,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2848,7 +2851,7 @@ msgid "" "depending on the request." msgstr "" -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2857,7 +2860,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2866,7 +2869,7 @@ msgid "" "can access specific data." msgstr "" -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2874,7 +2877,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2885,7 +2888,7 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2894,7 +2897,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2904,7 +2907,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2915,7 +2918,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2924,25 +2927,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2953,7 +2956,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2962,12 +2965,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/hr_HR/LC_MESSAGES/django.po b/engine/core/locale/hr_HR/LC_MESSAGES/django.po index b5a5edac..07f0c955 100644 --- a/engine/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/core/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,89 +49,89 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "" @@ -194,7 +194,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -216,7 +216,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "" @@ -344,9 +344,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "" @@ -450,7 +450,7 @@ msgstr "" msgid "retrieves a current pending order of an authenticated user" msgstr "" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "" @@ -614,6 +614,9 @@ msgid "Product UUID or slug" msgstr "" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "" @@ -1026,296 +1029,296 @@ msgstr "" msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "" -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:204 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1323,7 +1326,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1331,39 +1334,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1371,98 +1374,98 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "" @@ -2693,22 +2696,22 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" +msgid "{settings.PROJECT_NAME} | contact us initiated" msgstr "" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" +msgid "{settings.PROJECT_NAME} | order confirmation" msgstr "" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" +msgid "{settings.PROJECT_NAME} | order delivered" msgstr "" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" msgstr "" #: engine/core/utils/messages.py:3 @@ -2821,7 +2824,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2830,7 +2833,7 @@ msgid "" "and rendering formats." msgstr "" -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2838,7 +2841,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2848,7 +2851,7 @@ msgid "" "depending on the request." msgstr "" -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2857,7 +2860,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2866,7 +2869,7 @@ msgid "" "can access specific data." msgstr "" -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2874,7 +2877,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2885,7 +2888,7 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2894,7 +2897,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2904,7 +2907,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2915,7 +2918,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2924,25 +2927,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2953,7 +2956,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2962,12 +2965,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.mo b/engine/core/locale/id_ID/LC_MESSAGES/django.mo index 1ba9d622fefa9c98376d94cd1f60e6f828a973fd..2dea875ca4279ab728f0d8b3f99d5eee90fb62d5 100644 GIT binary patch delta 5516 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 U7Z+EQmQ<9KU2D3&MWHv~KMoYxX#fBK delta 5482 zcmZ|Tc~sU_9>?+fdkkD~1#`jFM?_f!QA1p?#0QrEQCw27)FDQa8q||>baMNpWmC=Q zn9LCu@;GLeT1`of79|>56P1%oi&iw{+JcrxE7WY>AMW+f@t@cI-g|#{zxSc8?+UBi z7537#C_l*A+BRD+LW z5$;BP*yVi&LWdzN!Sf#&lR^I7|1l;XpTfrE|BMyHzkO&-JK~DNwx60K#{7-^aQ~=X zsZn2%Xq;-^sq9rCGd zXUB14no{n+MnY$x8gIfMFoc(}34U;fN)K_#{$eh2TTgIZL1_7}#~ z;Y2(`eyG-%ASV2mfdnZ3%9wikH+xR9Tomj)+8MXvhoTU_xo-<|+A58exm@UNB z-?Oh+be=Lgi1>lo6Mu=#sMq+SF)8FnUSdng4`F+J__8tUapO?gy!%E{^`Zt$JdT54`p(W0C z=A&M)S*VfDMeX%67nh<={Z`b>DxL45CiDsF`%|cE{5`h9K$O?;eng_SD$OUMkxg^{ z8DofFMs<7))zE3|iglPRo{P-gidWa z>cefQGx3_Ma2B;f7f}seb#arMZT&W=0mP!}rJ`2kHdOr_=M>b$W}^Cg47mlqSwlig zUxr%ZZ5V-jPz@hIz5T~f*QO42jV_`(szv1W^&ZDT6sYM;i z=AG=j5!s3RuZJX?41G8s6LBf#;&#-Y{*0PQ#4YarqGlA2+NuoH3XOJg0jk{+9FFU8 z8`h!@>59&_-Bq2r{{zU_LWWM|3A_VO;W$k0VxLSOb@*PzAij>V_!*|4>1v2Y-jhQHN@9H+#s2p$0Y%wX_>h<Rmxhy!}xbjoR~- zsHIzjLEMTuL?#R*kw& zhfzy;3bmBqqE2Y+*OWxtz-YNyaSAN628jvDBC^!2oEBcTSW zPz}_%3c(~h(q!yG{t(oU$UUgNd%G)=Z!96}9XQnLH~ zFC;@tITzLNYSa_?JnFQcL3Q*aYDw!+hclwLU6E|mnVFA6a0lwPoW(BKC&e>4I2N^a z8&QXSYl?4|s*()d|NW?I^&V=kj-a;Wr1MAAOn*b2>c~E}UKeKyYGxVET-5hdQSHt` z-TyhLb{_XhXe8yRJ+44Cd;vA{tEgKM-q*&_s0MnVz8mVCgzC5iwNeXFE4AF^|J~*P z1GUxLQ7i6$LPEb%KcfcFsh^D}qqbrZ7GW9c#k=mxyWeV8Y!s@aaj0unh*|ho%*BsU zhcq_TGedC_YJh8z3HW9c3GKn8dQ7xopl&b|EA+$+h7RwK{2Z0lbD8YqL%Iw4#(7V&y2?h zQG5A5s{R$6h&_jR=1yFMlkhMqKmIoB5>z`!&{skG+ik%gocmE7v>R&ki=BI&Q5iOW z7OJB+aVka)v+-=ai}(O)0Kt%T0jj@4F7BSm{a1yBnQo-c_~AD8ogX`sN7xP?K^>|S zsKeWQq+P*2s9Q4`b$IVV9nPgV3sunB>ve&K$YH$0Zp57_g52s@u zKI!tm#&F_usKa{!bvu4RouSTm*p8D><+o!y9EELhx{K%eBtm37ff@J#K8r20Jo6C# z3pLXL*`7(oVpK<)P}i*5<+sSOzk(rDc?oLZYp_2abY8_Eao^GQtoh?fbR%OSYAMTc zIPOFJwHlUdf1ENU+9k?3xvK>dQ)LD$cI&6>i7{oSX>{j$cZOs_egO-mx;l3#$ zp$Fl49Eq>E3Rh8oLbV#}nVFb~x^Amc1AQIivDU?n^X$_0LM?d)>Mx=!)Y30Q-I8^v z>wW-}bpJ1r(2Tl`vopC5HIuohJzk9Zm3-Lcm!led4mG1H)M2YZ4e$)=*RJ(=`+XMP zOPq&^xCeuH60>ywZ<=6F=TJ-9ce1TG71M}c!24(83AS1`L^wpsLls=D&v@Z$T6A1E%lQLk)DzSpyC#S|~|e@<%7%m4rY diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.po b/engine/core/locale/id_ID/LC_MESSAGES/django.po index 9ab062d9..20afd4fc 100644 --- a/engine/core/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/core/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -19,7 +19,8 @@ msgstr "ID unik" #: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" -msgstr "ID unik digunakan untuk mengidentifikasi objek basis data secara pasti" +msgstr "" +"ID unik digunakan untuk mengidentifikasi objek basis data secara pasti" #: engine/core/abstract.py:20 msgid "is active" @@ -27,7 +28,8 @@ msgstr "Aktif" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Jika diset ke false, objek ini tidak dapat dilihat oleh pengguna tanpa izin " "yang diperlukan" @@ -48,89 +50,89 @@ msgstr "Dimodifikasi" msgid "when the object was last modified" msgstr "Kapan objek terakhir kali diedit" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Terjemahan" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Umum" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Hubungan" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "info tambahan" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Stempel waktu" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktifkan %(verbose_name_plural)s yang dipilih" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Item yang dipilih telah diaktifkan!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Menonaktifkan %(verbose_name_plural)s yang dipilih" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Item yang dipilih telah dinonaktifkan!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Nilai Atribut" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Nilai Atribut" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Gambar" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Gambar" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stok" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Saham" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Pesan Produk" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Pesan Produk" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Anak-anak" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfigurasi" @@ -154,7 +156,8 @@ msgstr "Disampaikan." msgid "canceled" msgstr "Dibatalkan" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Gagal" @@ -192,10 +195,10 @@ msgid "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." msgstr "" -"Skema OpenApi3 untuk API ini. Format dapat dipilih melalui negosiasi konten. " -"Bahasa dapat dipilih dengan parameter Accept-Language dan parameter kueri." +"Skema OpenApi3 untuk API ini. Format dapat dipilih melalui negosiasi konten." +" Bahasa dapat dipilih dengan parameter Accept-Language dan parameter kueri." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "I/O Cache" @@ -205,8 +208,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Terapkan hanya kunci untuk membaca data yang diizinkan dari cache.\n" -"Menerapkan kunci, data, dan batas waktu dengan autentikasi untuk menulis " -"data ke cache." +"Menerapkan kunci, data, dan batas waktu dengan autentikasi untuk menulis data ke cache." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -220,7 +222,7 @@ msgstr "Dapatkan parameter aplikasi yang dapat diekspos" msgid "send a message to the support team" msgstr "Kirim pesan ke tim dukungan" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Meminta URL CORSed. Hanya https yang diizinkan." @@ -272,7 +274,8 @@ msgstr "" "dapat diedit" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari grup atribut yang sudah ada sehingga " "tidak dapat diedit" @@ -328,7 +331,8 @@ msgstr "" "dapat diedit" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari nilai atribut yang sudah ada sehingga " "tidak dapat diedit" @@ -367,9 +371,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Cuplikan Meta SEO" @@ -388,8 +392,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Pencarian substring yang tidak peka huruf besar/kecil di human_readable_id, " "order_produk.product.name, dan order_produk.product.partnumber" @@ -413,7 +417,8 @@ msgstr "Filter berdasarkan ID pesanan yang dapat dibaca manusia" #: engine/core/docs/drf/viewsets.py:308 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" -"Filter berdasarkan email pengguna (pencocokan persis tanpa huruf besar-kecil)" +"Filter berdasarkan email pengguna (pencocokan persis tanpa huruf besar-" +"kecil)" #: engine/core/docs/drf/viewsets.py:313 msgid "Filter by user's UUID" @@ -427,9 +432,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Urutkan berdasarkan salah satu dari: uuid, human_readable_id, user_email, " "user, status, created, modified, buy_time, random. Awalan dengan '-' untuk " @@ -489,7 +494,7 @@ msgstr "mengambil pesanan yang tertunda saat ini dari pengguna" msgid "retrieves a current pending order of an authenticated user" msgstr "mengambil pesanan tertunda saat ini dari pengguna yang diautentikasi" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "membeli pesanan tanpa pembuatan akun" @@ -638,31 +643,20 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Memfilter berdasarkan satu atau beberapa pasangan nama/nilai atribut. \n" "- **Sintaks**: `attr_name = metode-nilai[;attr2 = metode2-nilai2]...`\n" -"- **Metode** (default ke `icontains` jika dihilangkan): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"- Pengetikan nilai**: JSON dicoba terlebih dahulu (sehingga Anda dapat " -"mengoper daftar/diktat), `true`/`false` untuk boolean, bilangan bulat, " -"float; jika tidak, maka akan diperlakukan sebagai string. \n" -"- **Base64**: awalan dengan `b64-` untuk menyandikan base64 yang aman bagi " -"URL untuk menyandikan nilai mentah. \n" +"- **Metode** (default ke `icontains` jika dihilangkan): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- Pengetikan nilai**: JSON dicoba terlebih dahulu (sehingga Anda dapat mengoper daftar/diktat), `true`/`false` untuk boolean, bilangan bulat, float; jika tidak, maka akan diperlakukan sebagai string. \n" +"- **Base64**: awalan dengan `b64-` untuk menyandikan base64 yang aman bagi URL untuk menyandikan nilai mentah. \n" "Contoh: \n" -"`warna=merah-pasti`, `ukuran=gt-10`, `fitur=dalam-[\"wifi\", " -"\"bluetooth\"]`,\n" +"`warna=merah-pasti`, `ukuran=gt-10`, `fitur=dalam-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description = berisi-aGVhdC1jb2xk`" #: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 @@ -675,14 +669,11 @@ msgstr "UUID Produk (persis)" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Daftar bidang yang dipisahkan koma untuk mengurutkan. Awalan dengan `-` " -"untuk mengurutkan. \n" -"**Diizinkan:** uuid, peringkat, nama, siput, dibuat, dimodifikasi, harga, " -"acak" +"Daftar bidang yang dipisahkan koma untuk mengurutkan. Awalan dengan `-` untuk mengurutkan. \n" +"**Diizinkan:** uuid, peringkat, nama, siput, dibuat, dimodifikasi, harga, acak" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -695,6 +686,9 @@ msgid "Product UUID or slug" msgstr "UUID Produk atau Siput" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Membuat produk" @@ -754,7 +748,8 @@ msgstr "Masukan alamat pelengkapan otomatis" #: engine/core/docs/drf/viewsets.py:794 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -"String kueri data mentah, harap tambahkan dengan data dari titik akhir geo-IP" +"String kueri data mentah, harap tambahkan dengan data dari titik akhir geo-" +"IP" #: engine/core/docs/drf/viewsets.py:800 msgid "limit the results amount, 1 < limit < 10, default: 5" @@ -1142,249 +1137,250 @@ msgstr "Tingkat" msgid "Product UUID" msgstr "UUID Produk" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Kunci yang harus dicari di dalam atau diatur ke dalam cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data yang akan disimpan dalam cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Batas waktu dalam detik untuk mengatur data ke dalam cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Data yang di-cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Data JSON yang di-camel dari URL yang diminta" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Hanya URL yang dimulai dengan http(s):// yang diperbolehkan" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Menambahkan produk ke pesanan" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pesanan {order_uuid} tidak ditemukan!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Menghapus produk dari pesanan" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Hapus semua produk dari pesanan" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Beli pesanan" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Harap berikan order_uuid atau order_hr_id - tidak boleh lebih dari satu!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Tipe yang salah berasal dari metode order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Melakukan tindakan pada daftar produk dalam pesanan" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Hapus/Tambah" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Tindakan harus berupa \"tambah\" atau \"hapus\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Melakukan tindakan pada daftar produk dalam daftar keinginan" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Berikan nilai `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} tidak ditemukan!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Menambahkan produk ke pesanan" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Menghapus produk dari pesanan" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Menghapus produk dari pesanan" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Menghapus produk dari pesanan" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Beli pesanan" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Kirimkan atribut dalam bentuk string seperti attr1 = nilai1, attr2 = nilai2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Menambah atau menghapus umpan balik untuk pesananproduk" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Tindakan harus berupa `menambahkan` atau `menghapus`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} tidak ditemukan!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "String alamat asli yang diberikan oleh pengguna" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Batas harus antara 1 dan 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bekerja dengan sangat baik" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Atribut" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atribut yang dikelompokkan" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Kelompok atribut" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategori" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Merek" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategori" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Persentase Markup" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Atribut dan nilai mana yang dapat digunakan untuk memfilter kategori ini." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Harga minimum dan maksimum untuk produk dalam kategori ini, jika tersedia." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tag untuk kategori ini" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produk dalam kategori ini" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendor" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Lintang (koordinat Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Bujur (koordinat X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Bagaimana cara" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Nilai penilaian dari 1 hingga 10, inklusif, atau 0 jika tidak ditetapkan." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Merupakan umpan balik dari pengguna." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Pemberitahuan" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Unduh url untuk produk pesanan ini jika ada" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Umpan balik" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Daftar produk pesanan dalam urutan ini" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Alamat penagihan" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1392,53 +1388,53 @@ msgstr "" "Alamat pengiriman untuk pesanan ini, kosongkan jika sama dengan alamat " "penagihan atau jika tidak berlaku" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Total harga pesanan ini" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Jumlah total produk yang dipesan" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Apakah semua produk dalam pesanan digital" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transaksi untuk pesanan ini" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Pesanan" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL gambar" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Gambar produk" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Umpan balik" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Merek" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Kelompok atribut" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1446,7 +1442,7 @@ msgstr "Kelompok atribut" msgid "price" msgstr "Harga" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1454,39 +1450,39 @@ msgstr "Harga" msgid "quantity" msgstr "Kuantitas" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Jumlah umpan balik" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produk hanya tersedia untuk pesanan pribadi" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Harga diskon" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produk" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Kode promosi" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produk yang dijual" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promosi" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendor" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1494,99 +1490,100 @@ msgstr "Vendor" msgid "product" msgstr "Produk" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produk yang diinginkan" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Daftar keinginan" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produk yang ditandai" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Label produk" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Kategori yang ditandai" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tag kategori" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nama proyek" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Nama Perusahaan" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Alamat Perusahaan" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Nomor Telepon Perusahaan" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -"'email from', terkadang harus digunakan sebagai pengganti nilai pengguna host" +"'email from', terkadang harus digunakan sebagai pengganti nilai pengguna " +"host" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Pengguna host email" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Jumlah maksimum untuk pembayaran" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Jumlah minimum untuk pembayaran" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Data analisis" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Data iklan" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfigurasi" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Kode bahasa" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Nama bahasa" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Bendera bahasa, jika ada :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Dapatkan daftar bahasa yang didukung" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Hasil pencarian produk" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Hasil pencarian produk" @@ -1599,9 +1596,9 @@ msgid "" msgstr "" "Mewakili sekelompok atribut, yang dapat berupa hirarki. Kelas ini digunakan " "untuk mengelola dan mengatur grup atribut. Sebuah grup atribut dapat " -"memiliki grup induk, membentuk struktur hirarki. Hal ini dapat berguna untuk " -"mengkategorikan dan mengelola atribut secara lebih efektif dalam sistem yang " -"kompleks." +"memiliki grup induk, membentuk struktur hirarki. Hal ini dapat berguna untuk" +" mengkategorikan dan mengelola atribut secara lebih efektif dalam sistem " +"yang kompleks." #: engine/core/models.py:91 msgid "parent of this group" @@ -1631,8 +1628,8 @@ msgid "" msgstr "" "Mewakili entitas vendor yang mampu menyimpan informasi tentang vendor " "eksternal dan persyaratan interaksinya. Kelas Vendor digunakan untuk " -"mendefinisikan dan mengelola informasi yang terkait dengan vendor eksternal. " -"Kelas ini menyimpan nama vendor, detail otentikasi yang diperlukan untuk " +"mendefinisikan dan mengelola informasi yang terkait dengan vendor eksternal." +" Kelas ini menyimpan nama vendor, detail otentikasi yang diperlukan untuk " "komunikasi, dan persentase markup yang diterapkan pada produk yang diambil " "dari vendor. Model ini juga menyimpan metadata dan batasan tambahan, " "sehingga cocok untuk digunakan dalam sistem yang berinteraksi dengan vendor " @@ -1691,8 +1688,8 @@ msgstr "" "Merupakan tag produk yang digunakan untuk mengklasifikasikan atau " "mengidentifikasi produk. Kelas ProductTag dirancang untuk mengidentifikasi " "dan mengklasifikasikan produk secara unik melalui kombinasi pengenal tag " -"internal dan nama tampilan yang mudah digunakan. Kelas ini mendukung operasi " -"yang diekspor melalui mixin dan menyediakan penyesuaian metadata untuk " +"internal dan nama tampilan yang mudah digunakan. Kelas ini mendukung operasi" +" yang diekspor melalui mixin dan menyediakan penyesuaian metadata untuk " "tujuan administratif." #: engine/core/models.py:209 engine/core/models.py:240 @@ -1721,8 +1718,8 @@ msgid "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -"Merupakan tag kategori yang digunakan untuk produk. Kelas ini memodelkan tag " -"kategori yang dapat digunakan untuk mengaitkan dan mengklasifikasikan " +"Merupakan tag kategori yang digunakan untuk produk. Kelas ini memodelkan tag" +" kategori yang dapat digunakan untuk mengaitkan dan mengklasifikasikan " "produk. Kelas ini mencakup atribut untuk pengenal tag internal dan nama " "tampilan yang mudah digunakan." @@ -1748,9 +1745,9 @@ msgid "" msgstr "" "Merupakan entitas kategori untuk mengatur dan mengelompokkan item terkait " "dalam struktur hierarki. Kategori dapat memiliki hubungan hierarkis dengan " -"kategori lain, yang mendukung hubungan induk-anak. Kelas ini mencakup bidang " -"untuk metadata dan representasi visual, yang berfungsi sebagai fondasi untuk " -"fitur-fitur terkait kategori. Kelas ini biasanya digunakan untuk " +"kategori lain, yang mendukung hubungan induk-anak. Kelas ini mencakup bidang" +" untuk metadata dan representasi visual, yang berfungsi sebagai fondasi " +"untuk fitur-fitur terkait kategori. Kelas ini biasanya digunakan untuk " "mendefinisikan dan mengelola kategori produk atau pengelompokan serupa " "lainnya dalam aplikasi, yang memungkinkan pengguna atau administrator " "menentukan nama, deskripsi, dan hierarki kategori, serta menetapkan atribut " @@ -1805,12 +1802,13 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"Mewakili objek Merek dalam sistem. Kelas ini menangani informasi dan atribut " -"yang terkait dengan merek, termasuk nama, logo, deskripsi, kategori terkait, " -"siput unik, dan urutan prioritas. Kelas ini memungkinkan pengaturan dan " -"representasi data yang terkait dengan merek di dalam aplikasi." +"Mewakili objek Merek dalam sistem. Kelas ini menangani informasi dan atribut" +" yang terkait dengan merek, termasuk nama, logo, deskripsi, kategori " +"terkait, siput unik, dan urutan prioritas. Kelas ini memungkinkan pengaturan" +" dan representasi data yang terkait dengan merek di dalam aplikasi." #: engine/core/models.py:448 msgid "name of this brand" @@ -1854,8 +1852,8 @@ msgstr "Kategori" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1863,10 +1861,10 @@ msgid "" msgstr "" "Mewakili stok produk yang dikelola dalam sistem. Kelas ini memberikan " "rincian tentang hubungan antara vendor, produk, dan informasi stok mereka, " -"serta properti terkait inventaris seperti harga, harga pembelian, kuantitas, " -"SKU, dan aset digital. Ini adalah bagian dari sistem manajemen inventaris " -"untuk memungkinkan pelacakan dan evaluasi produk yang tersedia dari berbagai " -"vendor." +"serta properti terkait inventaris seperti harga, harga pembelian, kuantitas," +" SKU, dan aset digital. Ini adalah bagian dari sistem manajemen inventaris " +"untuk memungkinkan pelacakan dan evaluasi produk yang tersedia dari berbagai" +" vendor." #: engine/core/models.py:520 msgid "the vendor supplying this product stock" @@ -1944,13 +1942,13 @@ msgid "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." msgstr "" -"Merepresentasikan produk dengan atribut seperti kategori, merek, tag, status " -"digital, nama, deskripsi, nomor komponen, dan siput. Menyediakan properti " +"Merepresentasikan produk dengan atribut seperti kategori, merek, tag, status" +" digital, nama, deskripsi, nomor komponen, dan siput. Menyediakan properti " "utilitas terkait untuk mengambil peringkat, jumlah umpan balik, harga, " "kuantitas, dan total pesanan. Dirancang untuk digunakan dalam sistem yang " "menangani e-commerce atau manajemen inventaris. Kelas ini berinteraksi " -"dengan model terkait (seperti Kategori, Merek, dan ProductTag) dan mengelola " -"cache untuk properti yang sering diakses untuk meningkatkan kinerja. Kelas " +"dengan model terkait (seperti Kategori, Merek, dan ProductTag) dan mengelola" +" cache untuk properti yang sering diakses untuk meningkatkan kinerja. Kelas " "ini digunakan untuk mendefinisikan dan memanipulasi data produk dan " "informasi terkait di dalam aplikasi." @@ -2007,12 +2005,12 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"Merupakan atribut dalam sistem. Kelas ini digunakan untuk mendefinisikan dan " -"mengelola atribut, yang merupakan bagian data yang dapat disesuaikan yang " +"Merupakan atribut dalam sistem. Kelas ini digunakan untuk mendefinisikan dan" +" mengelola atribut, yang merupakan bagian data yang dapat disesuaikan yang " "dapat dikaitkan dengan entitas lain. Atribut memiliki kategori, grup, tipe " "nilai, dan nama yang terkait. Model ini mendukung berbagai jenis nilai, " "termasuk string, integer, float, boolean, array, dan objek. Hal ini " @@ -2078,9 +2076,9 @@ msgstr "Atribut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Mewakili nilai spesifik untuk atribut yang terkait dengan produk. Ini " "menghubungkan 'atribut' dengan 'nilai' yang unik, memungkinkan pengaturan " @@ -2101,14 +2099,14 @@ msgstr "Nilai spesifik untuk atribut ini" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Mewakili gambar produk yang terkait dengan produk dalam sistem. Kelas ini " -"dirancang untuk mengelola gambar untuk produk, termasuk fungsionalitas untuk " -"mengunggah file gambar, mengasosiasikannya dengan produk tertentu, dan " +"dirancang untuk mengelola gambar untuk produk, termasuk fungsionalitas untuk" +" mengunggah file gambar, mengasosiasikannya dengan produk tertentu, dan " "menentukan urutan tampilannya. Kelas ini juga mencakup fitur aksesibilitas " "dengan teks alternatif untuk gambar." @@ -2150,8 +2148,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Merupakan kampanye promosi untuk produk dengan diskon. Kelas ini digunakan " "untuk mendefinisikan dan mengelola kampanye promosi yang menawarkan diskon " @@ -2227,8 +2225,8 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Merupakan catatan dokumenter yang terkait dengan suatu produk. Kelas ini " "digunakan untuk menyimpan informasi tentang film dokumenter yang terkait " @@ -2251,14 +2249,14 @@ msgstr "Belum terselesaikan" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Mewakili entitas alamat yang mencakup detail lokasi dan asosiasi dengan " "pengguna. Menyediakan fungsionalitas untuk penyimpanan data geografis dan " @@ -2332,8 +2330,8 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" "Mewakili kode promosi yang dapat digunakan untuk diskon, mengelola " -"validitas, jenis diskon, dan penerapannya. Kelas PromoCode menyimpan rincian " -"tentang kode promosi, termasuk pengenal unik, properti diskon (jumlah atau " +"validitas, jenis diskon, dan penerapannya. Kelas PromoCode menyimpan rincian" +" tentang kode promosi, termasuk pengenal unik, properti diskon (jumlah atau " "persentase), masa berlaku, pengguna terkait (jika ada), dan status " "penggunaannya. Ini termasuk fungsionalitas untuk memvalidasi dan menerapkan " "kode promo ke pesanan sambil memastikan batasan terpenuhi." @@ -2424,8 +2422,8 @@ msgstr "Jenis diskon tidak valid untuk kode promo {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2468,8 +2466,8 @@ msgstr "Status pesanan" #: engine/core/models.py:1243 engine/core/models.py:1769 msgid "json structure of notifications to display to users" msgstr "" -"Struktur JSON dari notifikasi untuk ditampilkan kepada pengguna, di UI admin " -"digunakan table-view" +"Struktur JSON dari notifikasi untuk ditampilkan kepada pengguna, di UI admin" +" digunakan table-view" #: engine/core/models.py:1249 msgid "json representation of order attributes for this order" @@ -2616,7 +2614,8 @@ msgid "feedback comments" msgstr "Komentar umpan balik" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "Merujuk ke produk tertentu sesuai dengan urutan umpan balik ini" #: engine/core/models.py:1720 @@ -2648,8 +2647,8 @@ msgstr "" "pesanan, termasuk rincian seperti harga pembelian, kuantitas, atribut " "produk, dan status. Model ini mengelola notifikasi untuk pengguna dan " "administrator dan menangani operasi seperti mengembalikan saldo produk atau " -"menambahkan umpan balik. Model ini juga menyediakan metode dan properti yang " -"mendukung logika bisnis, seperti menghitung harga total atau menghasilkan " +"menambahkan umpan balik. Model ini juga menyediakan metode dan properti yang" +" mendukung logika bisnis, seperti menghitung harga total atau menghasilkan " "URL unduhan untuk produk digital. Model ini terintegrasi dengan model " "Pesanan dan Produk dan menyimpan referensi ke keduanya." @@ -2761,9 +2760,9 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Mewakili fungsionalitas pengunduhan untuk aset digital yang terkait dengan " "pesanan. Kelas DigitalAssetDownload menyediakan kemampuan untuk mengelola " @@ -2829,8 +2828,7 @@ msgstr "Halo %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Terima kasih atas pesanan Anda #%(order.pk)s! Dengan senang hati kami " @@ -2939,15 +2937,13 @@ msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "" -"Terima kasih telah tinggal bersama kami! Kami telah memberikan Anda kode " -"promo\n" +"Terima kasih telah tinggal bersama kami! Kami telah memberikan Anda kode promo\n" " untuk" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Terima kasih atas pesanan Anda! Dengan senang hati kami mengkonfirmasi " @@ -2988,23 +2984,23 @@ msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | hubungi kami dimulai" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | hubungi kami dimulai" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Konfirmasi Pesanan" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | konfirmasi pesanan" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Pesanan Dikirim" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | pesanan terkirim" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | kode promo diberikan" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | kode promo diberikan" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3052,8 +3048,8 @@ msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -"Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci " -"dan batas waktu tertentu." +"Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci" +" dan batas waktu tertentu." #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -3078,14 +3074,10 @@ msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Menangani pengunduhan aset digital yang terkait dengan pesanan.\n" -"Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di " -"direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 " -"akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia." +"Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3114,19 +3106,15 @@ msgstr "favicon tidak ditemukan" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Menangani permintaan favicon dari sebuah situs web.\n" -"Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis " -"proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan " -"dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia." +"Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Mengalihkan permintaan ke halaman indeks admin. Fungsi ini menangani " @@ -3138,7 +3126,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Mengembalikan versi eVibes saat ini." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3152,12 +3140,13 @@ msgstr "" "dukungan untuk kelas serializer dinamis berdasarkan tindakan saat ini, izin " "yang dapat disesuaikan, dan format rendering." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Mewakili sebuah viewset untuk mengelola objek AttributeGroup. Menangani " "operasi yang terkait dengan AttributeGroup, termasuk pemfilteran, " @@ -3165,7 +3154,7 @@ msgstr "" "API aplikasi dan menyediakan cara standar untuk memproses permintaan dan " "respons untuk data AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3181,21 +3170,21 @@ msgstr "" "seperti pemfilteran berdasarkan bidang tertentu atau mengambil informasi " "yang terperinci versus yang disederhanakan tergantung pada permintaan." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"Sebuah viewset untuk mengelola objek AttributeValue. Viewset ini menyediakan " -"fungsionalitas untuk mendaftarkan, mengambil, membuat, memperbarui, dan " +"Sebuah viewset untuk mengelola objek AttributeValue. Viewset ini menyediakan" +" fungsionalitas untuk mendaftarkan, mengambil, membuat, memperbarui, dan " "menghapus objek AttributeValue. Ini terintegrasi dengan mekanisme viewset " "Django REST Framework dan menggunakan serializer yang sesuai untuk tindakan " "yang berbeda. Kemampuan pemfilteran disediakan melalui DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3204,12 +3193,12 @@ msgid "" "can access specific data." msgstr "" "Mengelola tampilan untuk operasi terkait Kategori. Kelas CategoryViewSet " -"bertanggung jawab untuk menangani operasi yang terkait dengan model Kategori " -"dalam sistem. Kelas ini mendukung pengambilan, pemfilteran, dan serialisasi " -"data kategori. ViewSet juga memberlakukan izin untuk memastikan bahwa hanya " -"pengguna yang memiliki izin yang dapat mengakses data tertentu." +"bertanggung jawab untuk menangani operasi yang terkait dengan model Kategori" +" dalam sistem. Kelas ini mendukung pengambilan, pemfilteran, dan serialisasi" +" data kategori. ViewSet juga memberlakukan izin untuk memastikan bahwa hanya" +" pengguna yang memiliki izin yang dapat mengakses data tertentu." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3218,10 +3207,10 @@ msgid "" msgstr "" "Mewakili sebuah viewset untuk mengelola instance Brand. Kelas ini " "menyediakan fungsionalitas untuk melakukan kueri, penyaringan, dan " -"serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django " -"untuk menyederhanakan implementasi titik akhir API untuk objek Brand." +"serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django" +" untuk menyederhanakan implementasi titik akhir API untuk objek Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3232,14 +3221,14 @@ msgid "" "product." msgstr "" "Mengelola operasi yang terkait dengan model `Product` dalam sistem. Kelas " -"ini menyediakan sebuah viewset untuk mengelola produk, termasuk pemfilteran, " -"serialisasi, dan operasi pada instance tertentu. Kelas ini diperluas dari " +"ini menyediakan sebuah viewset untuk mengelola produk, termasuk pemfilteran," +" serialisasi, dan operasi pada instance tertentu. Kelas ini diperluas dari " "`EvibesViewSet` untuk menggunakan fungsionalitas umum dan terintegrasi " -"dengan kerangka kerja Django REST untuk operasi RESTful API. Termasuk metode " -"untuk mengambil detail produk, menerapkan izin, dan mengakses umpan balik " +"dengan kerangka kerja Django REST untuk operasi RESTful API. Termasuk metode" +" untuk mengambil detail produk, menerapkan izin, dan mengakses umpan balik " "terkait produk." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3254,31 +3243,31 @@ msgstr "" "adalah untuk menyediakan akses yang efisien ke sumber daya yang berhubungan " "dengan Vendor melalui kerangka kerja Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Representasi set tampilan yang menangani objek Umpan Balik. Kelas ini " "mengelola operasi yang terkait dengan objek Umpan Balik, termasuk " "mendaftarkan, memfilter, dan mengambil detail. Tujuan dari set tampilan ini " -"adalah untuk menyediakan serializer yang berbeda untuk tindakan yang berbeda " -"dan mengimplementasikan penanganan berbasis izin untuk objek Umpan Balik " +"adalah untuk menyediakan serializer yang berbeda untuk tindakan yang berbeda" +" dan mengimplementasikan penanganan berbasis izin untuk objek Umpan Balik " "yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan " "menggunakan sistem penyaringan Django untuk meminta data." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet untuk mengelola pesanan dan operasi terkait. Kelas ini menyediakan " @@ -3290,12 +3279,12 @@ msgstr "" "beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " "memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Menyediakan viewset untuk mengelola entitas OrderProduct. Viewset ini " @@ -3304,11 +3293,11 @@ msgstr "" "serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " "tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3316,33 +3305,33 @@ msgstr "" "Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " "tindakan API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Merupakan set tampilan untuk mengelola promosi." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" "ViewSet untuk mengelola operasi Wishlist. WishlistViewSet menyediakan titik " -"akhir untuk berinteraksi dengan daftar keinginan pengguna, yang memungkinkan " -"pengambilan, modifikasi, dan penyesuaian produk dalam daftar keinginan. " -"ViewSet ini memfasilitasi fungsionalitas seperti menambahkan, menghapus, dan " -"tindakan massal untuk produk daftar keinginan. Pemeriksaan izin " +"akhir untuk berinteraksi dengan daftar keinginan pengguna, yang memungkinkan" +" pengambilan, modifikasi, dan penyesuaian produk dalam daftar keinginan. " +"ViewSet ini memfasilitasi fungsionalitas seperti menambahkan, menghapus, dan" +" tindakan massal untuk produk daftar keinginan. Pemeriksaan izin " "diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " "keinginan mereka sendiri kecuali jika izin eksplisit diberikan." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3350,18 +3339,18 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"Kelas ini menyediakan fungsionalitas viewset untuk mengelola objek `Alamat`. " -"Kelas AddressViewSet memungkinkan operasi CRUD, pemfilteran, dan tindakan " +"Kelas ini menyediakan fungsionalitas viewset untuk mengelola objek `Alamat`." +" Kelas AddressViewSet memungkinkan operasi CRUD, pemfilteran, dan tindakan " "khusus yang terkait dengan entitas alamat. Kelas ini mencakup perilaku " "khusus untuk metode HTTP yang berbeda, penggantian serializer, dan " "penanganan izin berdasarkan konteks permintaan." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Kesalahan pengodean geografis: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.mo b/engine/core/locale/it_IT/LC_MESSAGES/django.mo index 93f9ce07cbb36973487088b55ea08f15a431b1bf..6158cab78fd8150dc807f0ef681e18e8c47f7b29 100644 GIT binary patch delta 5487 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 X@~JZd{<4`f<^(3sD6O3Ne;xb>uZ!x7 delta 5427 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 diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.po b/engine/core/locale/it_IT/LC_MESSAGES/django.po index 09ef34b5..3c104829 100644 --- a/engine/core/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/core/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -29,10 +29,11 @@ msgstr "È attivo" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" -"Se impostato a false, questo oggetto non può essere visto dagli utenti senza " -"i necessari permessi." +"Se impostato a false, questo oggetto non può essere visto dagli utenti senza" +" i necessari permessi." #: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" @@ -50,89 +51,89 @@ msgstr "Modificato" msgid "when the object was last modified" msgstr "Quando l'oggetto è stato modificato per l'ultima volta" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Traduzioni" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Generale" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relazioni" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "informazioni aggiuntive" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadati" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Timestamp" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Attivare il %(verbose_name_plural)s selezionato" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Gli articoli selezionati sono stati attivati!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Disattivare il %(verbose_name_plural)s selezionato" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Gli articoli selezionati sono stati disattivati!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Valore dell'attributo" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Valori degli attributi" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Immagine" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Immagini" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Le scorte" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Ordina il prodotto" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Ordinare i prodotti" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "I bambini" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Configurazione" @@ -156,7 +157,8 @@ msgstr "Consegnato" msgid "canceled" msgstr "Annullato" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Fallito" @@ -194,11 +196,11 @@ msgid "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." msgstr "" -"Schema OpenApi3 per questa API. Il formato può essere selezionato tramite la " -"negoziazione dei contenuti. La lingua può essere selezionata sia con Accept-" -"Language che con il parametro query." +"Schema OpenApi3 per questa API. Il formato può essere selezionato tramite la" +" negoziazione dei contenuti. La lingua può essere selezionata sia con " +"Accept-Language che con il parametro query." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "I/O della cache" @@ -208,8 +210,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Applicare solo una chiave per leggere i dati consentiti dalla cache.\n" -"Applicare chiave, dati e timeout con autenticazione per scrivere dati nella " -"cache." +"Applicare chiave, dati e timeout con autenticazione per scrivere dati nella cache." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -223,7 +224,7 @@ msgstr "Ottenere i parametri esponibili dell'applicazione" msgid "send a message to the support team" msgstr "Inviate un messaggio al team di assistenza" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Richiedere un URL CORSed. È consentito solo https." @@ -274,7 +275,8 @@ msgstr "" "Riscrivere un gruppo di attributi esistente salvando i non modificabili" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Riscrivere alcuni campi di un gruppo di attributi esistente salvando quelli " "non modificabili" @@ -329,7 +331,8 @@ msgstr "" "modificabili" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Riscrivere alcuni campi di un valore di attributo esistente salvando i " "valori non modificabili" @@ -362,14 +365,14 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Meta-immagine SEO" @@ -389,12 +392,12 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Ricerca di sottostringhe senza distinzione di maiuscole e minuscole tra " -"human_readable_id, order_products.product.name e order_products.product." -"partnumber" +"human_readable_id, order_products.product.name e " +"order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -430,9 +433,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Ordinare per uno dei seguenti criteri: uuid, human_readable_id, user_email, " "user, status, created, modified, buy_time, random. Prefisso con '-' per la " @@ -466,8 +469,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:373 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:380 msgid "purchase an order" @@ -480,8 +483,8 @@ msgid "" "transaction is initiated." msgstr "" "Finalizza l'acquisto dell'ordine. Se si utilizza `forza_bilancio`, " -"l'acquisto viene completato utilizzando il saldo dell'utente; se si utilizza " -"`forza_pagamento`, viene avviata una transazione." +"l'acquisto viene completato utilizzando il saldo dell'utente; se si utilizza" +" `forza_pagamento`, viene avviata una transazione." #: engine/core/docs/drf/viewsets.py:397 msgid "retrieve current pending order of a user" @@ -491,7 +494,7 @@ msgstr "recuperare l'ordine in corso di un utente" msgid "retrieves a current pending order of an authenticated user" msgstr "recupera un ordine in sospeso di un utente autenticato" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "acquistare un ordine senza creare un account" @@ -557,8 +560,8 @@ msgstr "Elenco di tutti gli attributi (vista semplice)" #: engine/core/docs/drf/viewsets.py:460 msgid "for non-staff users, only their own wishlists are returned." msgstr "" -"Per gli utenti che non fanno parte del personale, vengono restituite solo le " -"loro liste dei desideri." +"Per gli utenti che non fanno parte del personale, vengono restituite solo le" +" loro liste dei desideri." #: engine/core/docs/drf/viewsets.py:467 msgid "retrieve a single wishlist (detailed view)" @@ -639,28 +642,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrare in base a una o più coppie nome/valore dell'attributo. \n" "- **Sintassi**: `nome_attraverso=metodo-valore[;attr2=metodo2-valore2]...`\n" -"- **Metodi** (predefiniti a `icontains` se omessi): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" -"- **Tipo di valore**: JSON viene tentato per primo (in modo da poter passare " -"liste/dict), `true`/`false` per booleani, interi, float; altrimenti viene " -"trattato come stringa. \n" -"- **Base64**: prefisso con `b64-` per codificare in base64 il valore " -"grezzo. \n" +"- **Metodi** (predefiniti a `icontains` se omessi): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" +"- **Tipo di valore**: JSON viene tentato per primo (in modo da poter passare liste/dict), `true`/`false` per booleani, interi, float; altrimenti viene trattato come stringa. \n" +"- **Base64**: prefisso con `b64-` per codificare in base64 il valore grezzo. \n" "Esempi: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -675,12 +668,10 @@ msgstr "(esatto) UUID del prodotto" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Elenco separato da virgole dei campi da ordinare. Prefisso con `-` per " -"l'ordinamento discendente. \n" +"Elenco separato da virgole dei campi da ordinare. Prefisso con `-` per l'ordinamento discendente. \n" "**Consentito:** uuid, rating, nome, slug, creato, modificato, prezzo, casuale" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -694,12 +685,16 @@ msgid "Product UUID or slug" msgstr "UUID o Slug del prodotto" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Creare un prodotto" #: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Riscrivere un prodotto esistente, preservando i campi non modificabili" +msgstr "" +"Riscrivere un prodotto esistente, preservando i campi non modificabili" #: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648 msgid "" @@ -781,8 +776,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:851 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:861 msgid "list all order–product relations (simple view)" @@ -840,8 +835,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:981 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:1006 msgid "list all vendors (simple view)" @@ -867,8 +862,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1041 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:1051 msgid "list all product images (simple view)" @@ -894,8 +889,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1086 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:1096 msgid "list all promo codes (simple view)" @@ -921,8 +916,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1131 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:1141 msgid "list all promotions (simple view)" @@ -948,8 +943,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:1186 msgid "list all stocks (simple view)" @@ -975,8 +970,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1221 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/docs/drf/viewsets.py:1231 msgid "list all product tags (simple view)" @@ -1002,8 +997,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" +"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" +" modificabili" #: engine/core/elasticsearch/__init__.py:122 #: engine/core/elasticsearch/__init__.py:570 @@ -1134,250 +1129,252 @@ msgstr "Livello" msgid "Product UUID" msgstr "UUID del prodotto" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Chiave da cercare o da inserire nella cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data to store in cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in secondi per l'inserimento dei dati nella cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Dati in cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Dati JSON camelizzati dall'URL richiesto" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Aggiungere un prodotto all'ordine" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordine {order_uuid} non trovato!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Rimuovere tutti i prodotti dall'ordine" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Acquistare un ordine" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" +msgstr "" +"Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Eseguire un'azione su un elenco di prodotti nell'ordine" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Rimuovi/Aggiungi" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "L'azione deve essere \"aggiungere\" o \"rimuovere\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Eseguire un'azione su un elenco di prodotti nella wishlist" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Fornire il valore `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista dei desideri {wishlist_uuid} non trovata!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Aggiungere un prodotto all'ordine" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Acquistare un ordine" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" -"Inviare gli attributi come stringa formattata come attr1=valore1," -"attr2=valore2" +"Inviare gli attributi come stringa formattata come " +"attr1=valore1,attr2=valore2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Aggiungere o eliminare un feedback per l'ordine-prodotto" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "L'azione deve essere `add` o `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Prodotto dell'ordine {order_product_uuid} non trovato!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Stringa di indirizzo originale fornita dall'utente" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Il limite deve essere compreso tra 1 e 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch: funziona a meraviglia" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Attributi" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Attributi raggruppati" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Gruppi di attributi" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Categorie" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Marche" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorie" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Percentuale di markup" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quali attributi e valori possono essere utilizzati per filtrare questa " "categoria." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Prezzi minimi e massimi per i prodotti di questa categoria, se disponibili." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tag per questa categoria" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Prodotti in questa categoria" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Venditori" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitudine (coordinata Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitudine (coordinata X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Come" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valore di valutazione da 1 a 10, incluso, o 0 se non impostato." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Rappresenta il feedback di un utente." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Notifiche" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL di download per il prodotto dell'ordine, se applicabile" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Un elenco di prodotti ordinati in questo ordine" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Indirizzo di fatturazione" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1385,53 +1382,53 @@ msgstr "" "Indirizzo di spedizione per questo ordine, lasciare in bianco se è uguale " "all'indirizzo di fatturazione o se non è applicabile" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Prezzo totale dell'ordine" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Quantità totale di prodotti in ordine" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Tutti i prodotti sono presenti nell'ordine digitale" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transazioni per questo ordine" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Ordini" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL immagine" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Immagini del prodotto" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Categoria" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Feedback" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Marchio" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Gruppi di attributi" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1439,7 +1436,7 @@ msgstr "Gruppi di attributi" msgid "price" msgstr "Prezzo" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1447,39 +1444,39 @@ msgstr "Prezzo" msgid "quantity" msgstr "Quantità" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Numero di feedback" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Prodotti disponibili solo per ordini personali" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Prezzo scontato" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Prodotti" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Codici promozionali" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Prodotti in vendita" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promozioni" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Venditore" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1487,99 +1484,99 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Liste dei desideri" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Prodotti contrassegnati" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Tag del prodotto" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Contrassegnato dalle categorie" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tag delle categorie" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nome del progetto" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Nome della società" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Indirizzo dell'azienda" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Numero di telefono dell'azienda" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', a volte deve essere usato al posto del valore dell'utente host" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Utente host dell'e-mail" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Importo massimo per il pagamento" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Importo minimo per il pagamento" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Dati analitici" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Dati pubblicitari" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configurazione" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Codice lingua" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Nome della lingua" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Bandiera della lingua, se esiste :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Ottenere un elenco delle lingue supportate" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Risultati della ricerca dei prodotti" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Risultati della ricerca dei prodotti" @@ -1590,9 +1587,9 @@ msgid "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." msgstr "" -"Rappresenta un gruppo di attributi, che può essere gerarchico. Questa classe " -"viene utilizzata per gestire e organizzare i gruppi di attributi. Un gruppo " -"di attributi può avere un gruppo padre, formando una struttura gerarchica. " +"Rappresenta un gruppo di attributi, che può essere gerarchico. Questa classe" +" viene utilizzata per gestire e organizzare i gruppi di attributi. Un gruppo" +" di attributi può avere un gruppo padre, formando una struttura gerarchica. " "Questo può essere utile per categorizzare e gestire meglio gli attributi in " "un sistema complesso." @@ -1716,8 +1713,8 @@ msgid "" msgstr "" "Rappresenta un tag di categoria utilizzato per i prodotti. Questa classe " "modella un tag di categoria che può essere usato per associare e " -"classificare i prodotti. Include gli attributi per un identificatore interno " -"del tag e un nome di visualizzazione facile da usare." +"classificare i prodotti. Include gli attributi per un identificatore interno" +" del tag e un nome di visualizzazione facile da usare." #: engine/core/models.py:254 msgid "category tag" @@ -1741,12 +1738,12 @@ msgid "" msgstr "" "Rappresenta un'entità di categoria per organizzare e raggruppare gli " "elementi correlati in una struttura gerarchica. Le categorie possono avere " -"relazioni gerarchiche con altre categorie, supportando le relazioni genitore-" -"figlio. La classe include campi per i metadati e per la rappresentazione " -"visiva, che servono come base per le funzionalità legate alle categorie. " -"Questa classe viene tipicamente utilizzata per definire e gestire le " -"categorie di prodotti o altri raggruppamenti simili all'interno di " -"un'applicazione, consentendo agli utenti o agli amministratori di " +"relazioni gerarchiche con altre categorie, supportando le relazioni " +"genitore-figlio. La classe include campi per i metadati e per la " +"rappresentazione visiva, che servono come base per le funzionalità legate " +"alle categorie. Questa classe viene tipicamente utilizzata per definire e " +"gestire le categorie di prodotti o altri raggruppamenti simili all'interno " +"di un'applicazione, consentendo agli utenti o agli amministratori di " "specificare il nome, la descrizione e la gerarchia delle categorie, nonché " "di assegnare attributi come immagini, tag o priorità." @@ -1800,13 +1797,14 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Rappresenta un oggetto Marchio nel sistema. Questa classe gestisce le " "informazioni e gli attributi relativi a un marchio, tra cui il nome, il " "logo, la descrizione, le categorie associate, uno slug unico e l'ordine di " -"priorità. Permette di organizzare e rappresentare i dati relativi al marchio " -"all'interno dell'applicazione." +"priorità. Permette di organizzare e rappresentare i dati relativi al marchio" +" all'interno dell'applicazione." #: engine/core/models.py:448 msgid "name of this brand" @@ -1850,8 +1848,8 @@ msgstr "Categorie" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1859,10 +1857,10 @@ msgid "" msgstr "" "Rappresenta lo stock di un prodotto gestito nel sistema. Questa classe " "fornisce dettagli sulla relazione tra fornitori, prodotti e informazioni " -"sulle scorte, oltre a proprietà legate all'inventario come prezzo, prezzo di " -"acquisto, quantità, SKU e asset digitali. Fa parte del sistema di gestione " -"dell'inventario per consentire il monitoraggio e la valutazione dei prodotti " -"disponibili presso i vari fornitori." +"sulle scorte, oltre a proprietà legate all'inventario come prezzo, prezzo di" +" acquisto, quantità, SKU e asset digitali. Fa parte del sistema di gestione " +"dell'inventario per consentire il monitoraggio e la valutazione dei prodotti" +" disponibili presso i vari fornitori." #: engine/core/models.py:520 msgid "the vendor supplying this product stock" @@ -1947,8 +1945,8 @@ msgstr "" "sistema che gestisce il commercio elettronico o l'inventario. Questa classe " "interagisce con i modelli correlati (come Category, Brand e ProductTag) e " "gestisce la cache per le proprietà a cui si accede di frequente, per " -"migliorare le prestazioni. Viene utilizzata per definire e manipolare i dati " -"dei prodotti e le informazioni ad essi associate all'interno di " +"migliorare le prestazioni. Viene utilizzata per definire e manipolare i dati" +" dei prodotti e le informazioni ad essi associate all'interno di " "un'applicazione." #: engine/core/models.py:585 @@ -2004,16 +2002,16 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Rappresenta un attributo nel sistema. Questa classe viene utilizzata per " -"definire e gestire gli attributi, che sono dati personalizzabili che possono " -"essere associati ad altre entità. Gli attributi hanno categorie, gruppi, " -"tipi di valori e nomi associati. Il modello supporta diversi tipi di valori, " -"tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una " -"strutturazione dinamica e flessibile dei dati." +"definire e gestire gli attributi, che sono dati personalizzabili che possono" +" essere associati ad altre entità. Gli attributi hanno categorie, gruppi, " +"tipi di valori e nomi associati. Il modello supporta diversi tipi di valori," +" tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una" +" strutturazione dinamica e flessibile dei dati." #: engine/core/models.py:733 msgid "group of this attribute" @@ -2076,9 +2074,9 @@ msgstr "Attributo" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Rappresenta un valore specifico per un attributo collegato a un prodotto. " "Collega l'\"attributo\" a un \"valore\" unico, consentendo una migliore " @@ -2100,14 +2098,14 @@ msgstr "Il valore specifico per questo attributo" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Rappresenta l'immagine di un prodotto associata a un prodotto del sistema. " -"Questa classe è progettata per gestire le immagini dei prodotti, comprese le " -"funzionalità di caricamento dei file immagine, di associazione a prodotti " +"Questa classe è progettata per gestire le immagini dei prodotti, comprese le" +" funzionalità di caricamento dei file immagine, di associazione a prodotti " "specifici e di determinazione dell'ordine di visualizzazione. Include anche " "una funzione di accessibilità con testo alternativo per le immagini." @@ -2150,11 +2148,11 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"Rappresenta una campagna promozionale per prodotti con sconto. Questa classe " -"viene utilizzata per definire e gestire campagne promozionali che offrono " +"Rappresenta una campagna promozionale per prodotti con sconto. Questa classe" +" viene utilizzata per definire e gestire campagne promozionali che offrono " "uno sconto in percentuale sui prodotti. La classe include attributi per " "impostare la percentuale di sconto, fornire dettagli sulla promozione e " "collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti " @@ -2227,13 +2225,13 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"Rappresenta un record documentario legato a un prodotto. Questa classe viene " -"utilizzata per memorizzare informazioni sui documentari relativi a prodotti " -"specifici, compresi i file caricati e i relativi metadati. Contiene metodi e " -"proprietà per gestire il tipo di file e il percorso di archiviazione dei " +"Rappresenta un record documentario legato a un prodotto. Questa classe viene" +" utilizzata per memorizzare informazioni sui documentari relativi a prodotti" +" specifici, compresi i file caricati e i relativi metadati. Contiene metodi " +"e proprietà per gestire il tipo di file e il percorso di archiviazione dei " "file documentari. Estende le funzionalità di mixin specifici e fornisce " "ulteriori caratteristiche personalizzate." @@ -2251,14 +2249,14 @@ msgstr "Non risolto" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Rappresenta un'entità indirizzo che include dettagli sulla posizione e " "associazioni con un utente. Fornisce funzionalità per la memorizzazione di " @@ -2332,8 +2330,8 @@ msgid "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." msgstr "" -"Rappresenta un codice promozionale che può essere utilizzato per gli sconti, " -"gestendone la validità, il tipo di sconto e l'applicazione. La classe " +"Rappresenta un codice promozionale che può essere utilizzato per gli sconti," +" gestendone la validità, il tipo di sconto e l'applicazione. La classe " "PromoCode memorizza i dettagli di un codice promozionale, tra cui il suo " "identificatore univoco, le proprietà dello sconto (importo o percentuale), " "il periodo di validità, l'utente associato (se presente) e lo stato di " @@ -2350,7 +2348,8 @@ msgstr "Identificatore del codice promozionale" #: engine/core/models.py:1095 msgid "fixed discount amount applied if percent is not used" -msgstr "Importo fisso dello sconto applicato se non si utilizza la percentuale" +msgstr "" +"Importo fisso dello sconto applicato se non si utilizza la percentuale" #: engine/core/models.py:1096 msgid "fixed discount amount" @@ -2411,8 +2410,8 @@ msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -"È necessario definire un solo tipo di sconto (importo o percentuale), ma non " -"entrambi o nessuno." +"È necessario definire un solo tipo di sconto (importo o percentuale), ma non" +" entrambi o nessuno." #: engine/core/models.py:1171 msgid "promocode already used" @@ -2427,18 +2426,19 @@ msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "Rappresenta un ordine effettuato da un utente. Questa classe modella un " -"ordine all'interno dell'applicazione, includendo i suoi vari attributi, come " -"le informazioni di fatturazione e spedizione, lo stato, l'utente associato, " -"le notifiche e le operazioni correlate. Gli ordini possono avere prodotti " +"ordine all'interno dell'applicazione, includendo i suoi vari attributi, come" +" le informazioni di fatturazione e spedizione, lo stato, l'utente associato," +" le notifiche e le operazioni correlate. Gli ordini possono avere prodotti " "associati, possono essere applicate promozioni, impostati indirizzi e " "aggiornati i dettagli di spedizione o fatturazione. Allo stesso modo, la " -"funzionalità supporta la gestione dei prodotti nel ciclo di vita dell'ordine." +"funzionalità supporta la gestione dei prodotti nel ciclo di vita " +"dell'ordine." #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2602,8 +2602,8 @@ msgstr "" "per catturare e memorizzare i commenti degli utenti su prodotti specifici " "che hanno acquistato. Contiene attributi per memorizzare i commenti degli " "utenti, un riferimento al prodotto correlato nell'ordine e una valutazione " -"assegnata dall'utente. La classe utilizza campi del database per modellare e " -"gestire efficacemente i dati di feedback." +"assegnata dall'utente. La classe utilizza campi del database per modellare e" +" gestire efficacemente i dati di feedback." #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2614,7 +2614,8 @@ msgid "feedback comments" msgstr "Commenti di feedback" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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." @@ -2760,9 +2761,9 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Rappresenta la funzionalità di download degli asset digitali associati agli " "ordini. La classe DigitalAssetDownload offre la possibilità di gestire e " @@ -2784,8 +2785,8 @@ msgstr "Scaricamento" msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -"per aggiungere un feedback è necessario fornire un commento, una valutazione " -"e l'uuid del prodotto dell'ordine." +"per aggiungere un feedback è necessario fornire un commento, una valutazione" +" e l'uuid del prodotto dell'ordine." #: engine/core/sitemaps.py:25 msgid "Home" @@ -2828,8 +2829,7 @@ msgstr "Hello %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Grazie per il vostro ordine #%(order.pk)s! Siamo lieti di informarla che " @@ -2858,8 +2858,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "" -"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero " -"%(config.EMAIL_HOST_USER)s." +"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero" +" %(config.EMAIL_HOST_USER)s." #: engine/core/templates/digital_order_created_email.html:133 #, python-format @@ -2911,8 +2911,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero " -"%(contact_email)s." +"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero" +" %(contact_email)s." #: engine/core/templates/digital_order_delivered_email.html:165 #: engine/core/templates/promocode_granted_email.html:108 @@ -2944,8 +2944,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Grazie per il vostro ordine! Siamo lieti di confermare il suo acquisto. Di " @@ -2987,23 +2986,23 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | contattaci iniziato" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contattaci iniziato" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Conferma d'ordine" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | Conferma d'ordine" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Ordine consegnato" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | ordine consegnato" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode granted" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3017,8 +3016,8 @@ msgstr "Il parametro NOMINATIM_URL deve essere configurato!" #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -"Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height} " -"pixel" +"Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height}" +" pixel" #: engine/core/views.py:73 msgid "" @@ -3080,15 +3079,10 @@ msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gestisce il download di una risorsa digitale associata a un ordine.\n" -"Questa funzione tenta di servire il file della risorsa digitale che si trova " -"nella directory di archiviazione del progetto. Se il file non viene trovato, " -"viene generato un errore HTTP 404 per indicare che la risorsa non è " -"disponibile." +"Questa funzione tenta di servire il file della risorsa digitale che si trova nella directory di archiviazione del progetto. Se il file non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3117,19 +3111,15 @@ msgstr "favicon non trovata" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gestisce le richieste per la favicon di un sito web.\n" -"Questa funzione tenta di servire il file favicon situato nella cartella " -"statica del progetto. Se il file favicon non viene trovato, viene generato " -"un errore HTTP 404 per indicare che la risorsa non è disponibile." +"Questa funzione tenta di servire il file favicon situato nella cartella statica del progetto. Se il file favicon non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Reindirizza la richiesta alla pagina indice dell'amministrazione. La " @@ -3141,7 +3131,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Restituisce la versione corrente di eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3152,23 +3142,24 @@ msgstr "" "Definisce un insieme di viste per la gestione delle operazioni relative a " "Evibes. La classe EvibesViewSet eredita da ModelViewSet e fornisce " "funzionalità per la gestione di azioni e operazioni sulle entità Evibes. " -"Include il supporto per classi di serializzatori dinamici in base all'azione " -"corrente, permessi personalizzabili e formati di rendering." +"Include il supporto per classi di serializzatori dinamici in base all'azione" +" corrente, permessi personalizzabili e formati di rendering." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Rappresenta un insieme di viste per la gestione degli oggetti " -"AttributeGroup. Gestisce le operazioni relative agli AttributeGroup, tra cui " -"il filtraggio, la serializzazione e il recupero dei dati. Questa classe fa " +"AttributeGroup. Gestisce le operazioni relative agli AttributeGroup, tra cui" +" il filtraggio, la serializzazione e il recupero dei dati. Questa classe fa " "parte del livello API dell'applicazione e fornisce un modo standardizzato " "per elaborare le richieste e le risposte per i dati di AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3181,16 +3172,16 @@ msgstr "" "dell'applicazione. Fornisce un insieme di endpoint API per interagire con i " "dati Attribute. Questa classe gestisce l'interrogazione, il filtraggio e la " "serializzazione degli oggetti Attribute, consentendo un controllo dinamico " -"sui dati restituiti, come il filtraggio per campi specifici o il recupero di " -"informazioni dettagliate o semplificate, a seconda della richiesta." +"sui dati restituiti, come il filtraggio per campi specifici o il recupero di" +" informazioni dettagliate o semplificate, a seconda della richiesta." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Un insieme di viste per la gestione degli oggetti AttributeValue. Questo " "insieme di viste fornisce funzionalità per elencare, recuperare, creare, " @@ -3199,7 +3190,7 @@ msgstr "" "per le diverse azioni. Le funzionalità di filtraggio sono fornite da " "DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3214,7 +3205,7 @@ msgstr "" "le autorizzazioni per garantire che solo gli utenti autorizzati possano " "accedere a dati specifici." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3222,11 +3213,11 @@ msgid "" "endpoints for Brand objects." msgstr "" "Rappresenta un insieme di viste per la gestione delle istanze del marchio. " -"Questa classe fornisce funzionalità per interrogare, filtrare e serializzare " -"gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare " -"l'implementazione di endpoint API per gli oggetti Brand." +"Questa classe fornisce funzionalità per interrogare, filtrare e serializzare" +" gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare" +" l'implementazione di endpoint API per gli oggetti Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3239,12 +3230,12 @@ msgstr "" "Gestisce le operazioni relative al modello `Product` nel sistema. Questa " "classe fornisce un insieme di viste per la gestione dei prodotti, compreso " "il loro filtraggio, la serializzazione e le operazioni su istanze " -"specifiche. Si estende da `EvibesViewSet` per utilizzare funzionalità comuni " -"e si integra con il framework Django REST per le operazioni API RESTful. " +"specifiche. Si estende da `EvibesViewSet` per utilizzare funzionalità comuni" +" e si integra con il framework Django REST per le operazioni API RESTful. " "Include metodi per recuperare i dettagli del prodotto, applicare i permessi " "e accedere ai feedback correlati di un prodotto." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3252,38 +3243,38 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"Rappresenta un insieme di viste per la gestione degli oggetti Vendor. Questo " -"insieme di viste consente di recuperare, filtrare e serializzare i dati del " -"fornitore. Definisce il queryset, le configurazioni dei filtri e le classi " +"Rappresenta un insieme di viste per la gestione degli oggetti Vendor. Questo" +" insieme di viste consente di recuperare, filtrare e serializzare i dati del" +" fornitore. Definisce il queryset, le configurazioni dei filtri e le classi " "di serializzazione utilizzate per gestire le diverse azioni. Lo scopo di " "questa classe è fornire un accesso semplificato alle risorse relative a " "Vendor attraverso il framework REST di Django." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Rappresentazione di un insieme di viste che gestisce gli oggetti Feedback. " -"Questa classe gestisce le operazioni relative agli oggetti Feedback, tra cui " -"l'elencazione, il filtraggio e il recupero dei dettagli. Lo scopo di questo " -"insieme di viste è fornire serializzatori diversi per azioni diverse e " +"Questa classe gestisce le operazioni relative agli oggetti Feedback, tra cui" +" l'elencazione, il filtraggio e il recupero dei dettagli. Lo scopo di questo" +" insieme di viste è fornire serializzatori diversi per azioni diverse e " "implementare una gestione basata sui permessi degli oggetti Feedback " "accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema " "di filtraggio di Django per interrogare i dati." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet per la gestione degli ordini e delle operazioni correlate. Questa " @@ -3295,12 +3286,12 @@ msgstr "" "serializzatori in base all'azione specifica da eseguire e applica le " "autorizzazioni di conseguenza durante l'interazione con i dati degli ordini." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Fornisce un insieme di viste per la gestione delle entità OrderProduct. " @@ -3310,12 +3301,13 @@ msgstr "" "richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " "sulle istanze di OrderProduct." -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" -"Gestisce le operazioni relative alle immagini dei prodotti nell'applicazione." +"Gestisce le operazioni relative alle immagini dei prodotti " +"nell'applicazione." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3323,20 +3315,20 @@ msgstr "" "Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " "varie azioni API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Rappresenta un insieme di viste per la gestione delle promozioni." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3348,10 +3340,10 @@ msgstr "" "ViewSet facilita funzionalità quali l'aggiunta, la rimozione e le azioni di " "massa per i prodotti della lista dei desideri. I controlli delle " "autorizzazioni sono integrati per garantire che gli utenti possano gestire " -"solo la propria lista dei desideri, a meno che non vengano concessi permessi " -"espliciti." +"solo la propria lista dei desideri, a meno che non vengano concessi permessi" +" espliciti." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3359,18 +3351,18 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"Questa classe fornisce la funzionalità viewset per la gestione degli oggetti " -"`Address`. La classe AddressViewSet consente operazioni CRUD, filtri e " +"Questa classe fornisce la funzionalità viewset per la gestione degli oggetti" +" `Address`. La classe AddressViewSet consente operazioni CRUD, filtri e " "azioni personalizzate relative alle entità indirizzo. Include comportamenti " "specializzati per diversi metodi HTTP, override del serializzatore e " "gestione dei permessi in base al contesto della richiesta." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.mo b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo index 806a78e9066b6224af512079fd8cbd2f0d4e620f..97ab1d0cc42ba674e71b1597242cc51cff39134e 100644 GIT binary patch delta 5481 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 delta 5466 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 diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.po b/engine/core/locale/ja_JP/LC_MESSAGES/django.po index 21caf307..d03d0c44 100644 --- a/engine/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/core/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -19,8 +19,7 @@ msgstr "ユニークID" #: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" -msgstr "" -"ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。" +msgstr "ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。" #: engine/core/abstract.py:20 msgid "is active" @@ -28,10 +27,9 @@ msgstr "アクティブ" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "" -"falseに設定された場合、このオブジェクトは必要なパーミッションのないユーザーに" -"は見えない。" +"if set to false, this object can't be seen by users without needed " +"permission" +msgstr "falseに設定された場合、このオブジェクトは必要なパーミッションのないユーザーには見えない。" #: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" @@ -49,89 +47,89 @@ msgstr "変形" msgid "when the object was last modified" msgstr "オブジェクトの最終編集日時" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "翻訳" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "一般" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "関係" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "追加情報" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "メタデータ" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "タイムスタンプ" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "選択した%(verbose_name_plural)sをアクティブにする" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "選択した項目がアクティブになりました!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "選択された%(verbose_name_plural)sを非アクティブにする" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "選択されたアイテムは無効化されました!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "属性値" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "属性値" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "画像" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "画像" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "在庫" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "株式" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "商品のご注文" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "商品のご注文" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "子供たち" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "コンフィグ" @@ -155,7 +153,8 @@ msgstr "配信" msgid "canceled" msgstr "キャンセル" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "失敗" @@ -193,10 +192,10 @@ msgid "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." msgstr "" -"この API の OpenApi3 スキーマ。フォーマットはコンテントネゴシエーションで選択" -"できる。言語は Accept-Language とクエリパラメータで選択できる。" +"この API の OpenApi3 スキーマ。フォーマットはコンテントネゴシエーションで選択できる。言語は Accept-Language " +"とクエリパラメータで選択できる。" -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "キャッシュI/O" @@ -206,8 +205,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "許可されたデータをキャッシュから読み出すには、キーのみを適用する。\n" -"キャッシュにデータを書き込むには、認証付きのキー、データ、タイムアウトを適用" -"する。" +"キャッシュにデータを書き込むには、認証付きのキー、データ、タイムアウトを適用する。" #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -221,7 +219,7 @@ msgstr "アプリケーションの公開可能なパラメータを取得する msgid "send a message to the support team" msgstr "サポートチームにメッセージを送る" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "CORSされたURLを要求する。httpsのみ許可。" @@ -241,9 +239,7 @@ msgstr "ビジネスとして注文を購入する" msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." -msgstr "" -"提供された `product` と `product_uuid` と `attributes` を使用して、ビジネスと" -"して注文を購入する。" +msgstr "提供された `product` と `product_uuid` と `attributes` を使用して、ビジネスとして注文を購入する。" #: engine/core/docs/drf/views.py:164 msgid "download a digital asset from purchased digital order" @@ -270,10 +266,9 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "既存の属性グループを書き換えて、編集不可能なものを保存する。" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" -"既存の属性グループのいくつかのフィールドを書き換え、編集不可能なものを保存す" -"る。" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" +msgstr "既存の属性グループのいくつかのフィールドを書き換え、編集不可能なものを保存する。" #: engine/core/docs/drf/viewsets.py:106 msgid "list all attributes (simple view)" @@ -297,8 +292,7 @@ msgstr "既存の属性を書き換える。" #: engine/core/docs/drf/viewsets.py:141 msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" +msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" #: engine/core/docs/drf/viewsets.py:151 msgid "list all attribute values (simple view)" @@ -321,9 +315,9 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "既存の属性値を書き換える。" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" -"既存の属性値のいくつかのフィールドを書き換え、編集不可能な値を保存する。" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" +msgstr "既存の属性値のいくつかのフィールドを書き換え、編集不可能な値を保存する。" #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 msgid "list all categories (simple view)" @@ -355,9 +349,9 @@ msgstr "編集不可を保存している既存のカテゴリのいくつかの #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEOメタ・スナップショット" @@ -375,11 +369,10 @@ msgstr "スタッフ以外のユーザーについては、自分の注文のみ #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"human_readable_id、order_products.product.name、order_products.product." -"partnumberの大文字小文字を区別しない部分文字列検索" +"human_readable_id、order_products.product.name、order_products.product.partnumberの大文字小文字を区別しない部分文字列検索" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -399,8 +392,7 @@ msgstr "人間が読み取れる正確な注文IDによるフィルタリング" #: engine/core/docs/drf/viewsets.py:308 msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"ユーザーのEメールによるフィルタリング(大文字・小文字を区別しない完全一致)" +msgstr "ユーザーのEメールによるフィルタリング(大文字・小文字を区別しない完全一致)" #: engine/core/docs/drf/viewsets.py:313 msgid "Filter by user's UUID" @@ -408,19 +400,15 @@ msgstr "ユーザーのUUIDによるフィルタリング" #: engine/core/docs/drf/viewsets.py:318 msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"注文ステータスによるフィルタリング(大文字と小文字を区別しない部分文字列マッ" -"チ)" +msgstr "注文ステータスによるフィルタリング(大文字と小文字を区別しない部分文字列マッチ)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" -"uuid、human_readable_id、user_email、user、status、created、modified、" -"buy_time、randomのいずれかによる順序。降順の場合は'-'をプレフィックスとしてつ" -"ける(例:'-buy_time')。" +"uuid、human_readable_id、user_email、user、status、created、modified、buy_time、randomのいずれかによる順序。降順の場合は'-'をプレフィックスとしてつける(例:'-buy_time')。" #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -460,9 +448,8 @@ msgid "" "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -"注文の購入を確定する。force_balance` が使用された場合、ユーザーの残高を使用し" -"て購入が完了します。 `force_payment` が使用された場合、トランザクションが開始" -"されます。" +"注文の購入を確定する。force_balance` が使用された場合、ユーザーの残高を使用して購入が完了します。 `force_payment` " +"が使用された場合、トランザクションが開始されます。" #: engine/core/docs/drf/viewsets.py:397 msgid "retrieve current pending order of a user" @@ -472,7 +459,7 @@ msgstr "ユーザーの現在の保留中の注文を取得する" msgid "retrieves a current pending order of an authenticated user" msgstr "認証されたユーザーの現在の保留中の注文を取得します。" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "アカウントを作成せずに注文を購入する" @@ -488,8 +475,7 @@ msgstr "注文に商品を追加する" msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." -msgstr "" -"指定した `product_uuid` と `attributes` を使用して、商品を注文に追加する。" +msgstr "指定した `product_uuid` と `attributes` を使用して、商品を注文に追加する。" #: engine/core/docs/drf/viewsets.py:429 msgid "add a list of products to order, quantities will not count" @@ -499,9 +485,7 @@ msgstr "数量はカウントされません。" msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." -msgstr "" -"指定された `product_uuid` と `attributes` を使用して、注文に商品のリストを追" -"加する。" +msgstr "指定された `product_uuid` と `attributes` を使用して、注文に商品のリストを追加する。" #: engine/core/docs/drf/viewsets.py:438 msgid "remove product from order" @@ -511,9 +495,7 @@ msgstr "注文から商品を削除する" msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." -msgstr "" -"指定された `product_uuid` と `attributes` を使用して、注文から商品を削除す" -"る。" +msgstr "指定された `product_uuid` と `attributes` を使用して、注文から商品を削除する。" #: engine/core/docs/drf/viewsets.py:447 msgid "remove product from order, quantities will not count" @@ -523,9 +505,7 @@ msgstr "注文から商品を削除すると、数量はカウントされませ msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" -msgstr "" -"指定された `product_uuid` と `attributes` を用いて、注文から商品のリストを削" -"除する。" +msgstr "指定された `product_uuid` と `attributes` を用いて、注文から商品のリストを削除する。" #: engine/core/docs/drf/viewsets.py:459 msgid "list all wishlists (simple view)" @@ -557,8 +537,7 @@ msgstr "既存の属性を書き換える。" #: engine/core/docs/drf/viewsets.py:496 msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" +msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" #: engine/core/docs/drf/viewsets.py:503 msgid "retrieve current pending wishlist of a user" @@ -582,8 +561,7 @@ msgstr "ウィッシュリストから商品を削除する" #: engine/core/docs/drf/viewsets.py:524 msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"指定された `product_uuid` を使ってウィッシュリストから商品を削除します。" +msgstr "指定された `product_uuid` を使ってウィッシュリストから商品を削除します。" #: engine/core/docs/drf/viewsets.py:532 msgid "add many products to wishlist" @@ -591,8 +569,7 @@ msgstr "ウィッシュリストに多くの商品を追加する" #: engine/core/docs/drf/viewsets.py:533 msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"指定された `product_uuids` を使ってウィッシュリストに多くの商品を追加する。" +msgstr "指定された `product_uuids` を使ってウィッシュリストに多くの商品を追加する。" #: engine/core/docs/drf/viewsets.py:541 msgid "remove many products from wishlist" @@ -601,34 +578,24 @@ msgstr "注文から商品を削除する" #: engine/core/docs/drf/viewsets.py:542 msgid "" "removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"指定された `product_uuids` を使ってウィッシュリストから多くの商品を削除する。" +msgstr "指定された `product_uuids` を使ってウィッシュリストから多くの商品を削除する。" #: engine/core/docs/drf/viewsets.py:549 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "1つまたは複数の属性名/値のペアでフィルタリングします。 \n" "- シンタックス**:attr_name=method-value[;attr2=method2-value2]...`。\n" -"- メソッド** (省略された場合のデフォルトは `icontains`):`iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" -"- 値の型付け**:boolean, integer, float の場合は `true`/`false`; それ以外の場" -"合は文字列として扱う。 \n" -"- それ以外は文字列として扱われる。 **Base64**: `b64-` をプレフィックスとして" -"つけると、生の値を URL-safe base64-encode することができる。 \n" +"- メソッド** (省略された場合のデフォルトは `icontains`):`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" +"- 値の型付け**:boolean, integer, float の場合は `true`/`false`; それ以外の場合は文字列として扱う。 \n" +"- それ以外は文字列として扱われる。 **Base64**: `b64-` をプレフィックスとしてつけると、生の値を URL-safe base64-encode することができる。 \n" "例 \n" "color=exact-red`、`size=gt-10`、`features=in-[\"wifi\", \"bluetooth\"]`、\n" "b64-description=icontains-aGVhdC1jb2xk`。" @@ -643,12 +610,10 @@ msgstr "(正確には)製品UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"カンマ区切りの並べ替えフィールドのリスト。降順の場合は `-` をプレフィックスと" -"してつける。 \n" +"カンマ区切りの並べ替えフィールドのリスト。降順の場合は `-` をプレフィックスとしてつける。 \n" "**許可:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -662,6 +627,9 @@ msgid "Product UUID or slug" msgstr "製品UUIDまたはスラグ" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "製品を作る" @@ -672,9 +640,7 @@ msgstr "編集不可能なフィールドを保持したまま、既存の製品 #: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648 msgid "" "update some fields of an existing product, preserving non-editable fields" -msgstr "" -"編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新す" -"る。" +msgstr "編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新する。" #: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 msgid "delete a product" @@ -719,8 +685,8 @@ msgstr "オートコンプリート住所入力" #: engine/core/docs/drf/viewsets.py:794 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -"docker compose exec app poetry run python manage.py deepl_translate -l en-gb " -"-l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " +"docker compose exec app poetry run python manage.py deepl_translate -l en-gb" +" -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " "it-it -l ja-jp -l kk-kz -l n-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-" "hans -a core -a geo -a payments -a vibes_auth -a blog" @@ -750,9 +716,7 @@ msgstr "既存のフィードバックを書き換える。" #: engine/core/docs/drf/viewsets.py:851 msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保" -"存する。" +msgstr "既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保存する。" #: engine/core/docs/drf/viewsets.py:861 msgid "list all order–product relations (simple view)" @@ -808,8 +772,7 @@ msgstr "編集不可の既存ブランドをリライトする" #: engine/core/docs/drf/viewsets.py:981 msgid "rewrite some fields of an existing brand saving non-editables" -msgstr "" -"編集不可能なフィールドを保存している既存ブランドのフィールドを書き換える。" +msgstr "編集不可能なフィールドを保存している既存ブランドのフィールドを書き換える。" #: engine/core/docs/drf/viewsets.py:1006 msgid "list all vendors (simple view)" @@ -833,9 +796,7 @@ msgstr "既存のベンダーを書き換え、編集不可能な部分を保存 #: engine/core/docs/drf/viewsets.py:1041 msgid "rewrite some fields of an existing vendor saving non-editables" -msgstr "" -"既存のベンダーのいくつかのフィールドを書き換えて、編集不可能なフィールドを保" -"存する。" +msgstr "既存のベンダーのいくつかのフィールドを書き換えて、編集不可能なフィールドを保存する。" #: engine/core/docs/drf/viewsets.py:1051 msgid "list all product images (simple view)" @@ -859,9 +820,7 @@ msgstr "既存の商品画像を書き換え、編集不可能な部分を保存 #: engine/core/docs/drf/viewsets.py:1086 msgid "rewrite some fields of an existing product image saving non-editables" -msgstr "" -"既存の商品画像のいくつかのフィールドを書き換えて、編集不可能な部分を保存す" -"る。" +msgstr "既存の商品画像のいくつかのフィールドを書き換えて、編集不可能な部分を保存する。" #: engine/core/docs/drf/viewsets.py:1096 msgid "list all promo codes (simple view)" @@ -885,9 +844,7 @@ msgstr "既存のプロモコードを書き換え、編集不可のプロモコ #: engine/core/docs/drf/viewsets.py:1131 msgid "rewrite some fields of an existing promo code saving non-editables" -msgstr "" -"既存のプロモコードの一部のフィールドを書き換えて、編集不可能な部分を保存す" -"る。" +msgstr "既存のプロモコードの一部のフィールドを書き換えて、編集不可能な部分を保存する。" #: engine/core/docs/drf/viewsets.py:1141 msgid "list all promotions (simple view)" @@ -911,9 +868,7 @@ msgstr "既存のプロモーションを書き換える。" #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" -msgstr "" -"既存のプロモーションのいくつかのフィールドを書き換え、編集不可能な部分を保存" -"する。" +msgstr "既存のプロモーションのいくつかのフィールドを書き換え、編集不可能な部分を保存する。" #: engine/core/docs/drf/viewsets.py:1186 msgid "list all stocks (simple view)" @@ -937,9 +892,7 @@ msgstr "既存のストックレコードを書き換え、編集不可能なも #: engine/core/docs/drf/viewsets.py:1221 msgid "rewrite some fields of an existing stock record saving non-editables" -msgstr "" -"編集不可能なフィールドを保存している既存のストックレコードの一部のフィールド" -"を書き換える。" +msgstr "編集不可能なフィールドを保存している既存のストックレコードの一部のフィールドを書き換える。" #: engine/core/docs/drf/viewsets.py:1231 msgid "list all product tags (simple view)" @@ -963,8 +916,7 @@ msgstr "既存の商品タグを書き換え、編集不可能なものを保存 #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" -msgstr "" -"既存の商品タグの一部のフィールドを書き換えて、編集不可能な部分を保存する。" +msgstr "既存の商品タグの一部のフィールドを書き換えて、編集不可能な部分を保存する。" #: engine/core/elasticsearch/__init__.py:122 #: engine/core/elasticsearch/__init__.py:570 @@ -1046,8 +998,7 @@ msgstr "SKU" #: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"include_subcategoriesフラグを使うには、category_uuidがなければならない。" +msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。" #: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" @@ -1095,297 +1046,297 @@ msgstr "レベル" msgid "Product UUID" msgstr "製品UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "キャッシュを探すキー、またはキャッシュにセットするキー" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "キャッシュに保存するデータ" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "キャッシュにデータをセットするタイムアウト時間(秒" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "キャッシュ・データ" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "リクエストされたURLからキャメル化されたJSONデータ" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://で始まるURLのみが許可されます。" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "注文に商品を追加する" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "注文 {order_uuid} が見つかりません!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "注文からすべての商品を削除する" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "注文する" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "注文商品のリストに対してアクションを実行する" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "削除/追加" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "アクションは \"add \"か \"remove \"のどちらかでなければならない!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "ウィッシュリストの商品リストに対してアクションを実行する" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "wishlist_uuid`の値を指定してください。" -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "ウィッシュリスト {wishlist_uuid} が見つかりません!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "注文に商品を追加する" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "注文する" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "" -"属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" +msgstr "属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "orderproductに対するフィードバックを追加または削除する。" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "アクションは `add` または `remove` のいずれかでなければならない!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} が見つかりません!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "上限は1から10の間でなければならない" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 魅力のように動作" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "属性" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "グループ化された属性" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "属性のグループ" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "カテゴリー" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "ブランド" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "カテゴリー" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "マークアップ率" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "このカテゴリのフィルタリングに使用できる属性と値。" -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "このカテゴリーの商品の最低価格と最高価格がある場合。" -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "このカテゴリのタグ" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "このカテゴリの製品" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "ベンダー" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "緯度(Y座標)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "経度(X座標)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "どのように" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1から10までの評価値(設定されていない場合は0)。" -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "お知らせ" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "フィードバック" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "請求先住所" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "請求先住所と同じ場合、または該当しない場合は空白にしてください。" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "この注文の合計金額" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "注文商品の総数量" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "ご注文の商品はすべてデジタルですか?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "この注文の取引" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "受注状況" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "画像URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "製品画像" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "カテゴリー" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "フィードバック" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "ブランド" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "属性グループ" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1393,7 +1344,7 @@ msgstr "属性グループ" msgid "price" msgstr "価格" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1401,39 +1352,39 @@ msgstr "価格" msgid "quantity" msgstr "数量" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "フィードバック数" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "個人注文のみの商品" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "割引価格" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "製品紹介" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "プロモコード" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "販売商品" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "プロモーション" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "ベンダー" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1441,98 +1392,98 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "ウィッシュリスト" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "タグ別アーカイブ" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "商品タグ" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "タグ別アーカイブ" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "カテゴリー' タグ" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "プロジェクト名" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "会社名" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "会社住所" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "会社電話番号" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from' は、ホストユーザの値の代わりに使用されることがあります。" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "メールホストユーザー" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "支払限度額" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "最低支払額" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "分析データ" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "広告データ" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "構成" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "言語コード" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "言語名" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "言語フラグがある場合 :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "サポートされている言語のリストを取得する" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "製品検索結果" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "製品検索結果" @@ -1543,10 +1494,7 @@ msgid "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." msgstr "" -"属性グループを表し、階層化することができます。このクラスは、属性グループの管" -"理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形" -"成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利で" -"す。" +"属性グループを表し、階層化することができます。このクラスは、属性グループの管理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利です。" #: engine/core/models.py:91 msgid "parent of this group" @@ -1574,12 +1522,8 @@ msgid "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." msgstr "" -"外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティ" -"を表します。Vendor クラスは、外部ベンダーに関連する情報を定義・管理するために" -"使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得" -"した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、" -"追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りする" -"システムでの使用に適しています。" +"外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティを表します。Vendor " +"クラスは、外部ベンダーに関連する情報を定義・管理するために使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りするシステムでの使用に適しています。" #: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" @@ -1629,11 +1573,8 @@ msgid "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." msgstr "" -"製品を分類または識別するために使用される製品タグを表します。ProductTag クラス" -"は、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を" -"一意に識別および分類するように設計されています。ミキシンを通じてエクスポート" -"される操作をサポートし、管理目的のためにメタデータのカスタマイズを提供しま" -"す。" +"製品を分類または識別するために使用される製品タグを表します。ProductTag " +"クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。" #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1661,9 +1602,7 @@ msgid "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -"商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類" -"に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンド" -"リーな表示名の属性が含まれます。" +"商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。" #: engine/core/models.py:254 msgid "category tag" @@ -1685,13 +1624,7 @@ msgid "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." msgstr "" -"関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティ" -"ティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を" -"持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータお" -"よび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーショ" -"ン内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用さ" -"れ、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先" -"度などの属性を割り当てることができます。" +"関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。" #: engine/core/models.py:274 msgid "upload an image representing this category" @@ -1742,12 +1675,10 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説" -"明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報" -"と属性を処理します。このクラスによって、アプリケーション内でブランド関連デー" -"タを整理し、表現することができます。" +"システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" #: engine/core/models.py:448 msgid "name of this brand" @@ -1791,17 +1722,14 @@ msgstr "カテゴリー" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" -"システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、" -"およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資" -"産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さま" -"ざまなベンダーから入手可能な製品の追跡と評価を可能にします。" +"システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" #: engine/core/models.py:520 msgid "the vendor supplying this product stock" @@ -1879,13 +1807,9 @@ msgid "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." msgstr "" -"カテゴリ、ブランド、タグ、デジタルステータス、名前、説明、品番、スラッグなど" -"の属性を持つ製品を表します。評価、フィードバック数、価格、数量、注文総数を取" -"得するための関連ユーティリティ・プロパティを提供します。電子商取引や在庫管理" -"を扱うシステムで使用するように設計されています。このクラスは、関連するモデル " -"(Category、Brand、ProductTag など) と相互作用し、パフォーマンスを向上させるた" -"めに、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーショ" -"ン内で商品データとその関連情報を定義し、操作するために使用されます。" +"カテゴリ、ブランド、タグ、デジタルステータス、名前、説明、品番、スラッグなどの属性を持つ製品を表します。評価、フィードバック数、価格、数量、注文総数を取得するための関連ユーティリティ・プロパティを提供します。電子商取引や在庫管理を扱うシステムで使用するように設計されています。このクラスは、関連するモデル" +" (Category、Brand、ProductTag など) " +"と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" #: engine/core/models.py:585 msgid "category this product belongs to" @@ -1940,16 +1864,12 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"システム内の属性を表します。このクラスは、属性を定義および管理するために使用" -"されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能" -"なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前が" -"あります。このモデルは、string、integer、float、boolean、array、object などの" -"複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能" -"になります。" +"システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object" +" などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。" #: engine/core/models.py:733 msgid "group of this attribute" @@ -2010,12 +1930,11 @@ msgstr "属性" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の" -"「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。" +"製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。" #: engine/core/models.py:788 msgid "attribute of this value" @@ -2032,15 +1951,12 @@ msgstr "この属性の具体的な値" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" -"システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を" -"管理するために設計されており、画像ファイルのアップロード、特定の商品との関連" -"付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアク" -"セシビリティ機能も備えています。" +"システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を管理するために設計されており、画像ファイルのアップロード、特定の商品との関連付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアクセシビリティ機能も備えています。" #: engine/core/models.py:826 msgid "provide alternative text for the image for accessibility" @@ -2080,14 +1996,10 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセ" -"ンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用" -"します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当す" -"る商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペー" -"ンの対象商品を決定します。" +"割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" #: engine/core/models.py:880 msgid "percentage discount for the selected products" @@ -2128,10 +2040,7 @@ msgid "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." msgstr "" -"希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。この" -"クラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操" -"作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートしま" -"す。" +"希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2155,14 +2064,10 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファ" -"イルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタ" -"リーに関する情報を格納するために使用されます。ドキュメントファイルのファイル" -"タイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミック" -"スインから機能を拡張し、追加のカスタム機能を提供します。" +"商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" #: engine/core/models.py:998 msgid "documentary" @@ -2178,23 +2083,20 @@ msgstr "未解決" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" -"場所の詳細とユーザーとの関連付けを含む住所エンティティを表します。地理データ" -"および住所データを保存する機能と、ジオコーディングサービスとの統合機能を提供" -"します。このクラスは、street、city、region、country、geolocation (longitude " -"and latitude) のようなコンポーネントを含む詳細な住所情報を格納するように設計" -"されています。ジオコーディング API との統合をサポートしており、 生の API レス" -"ポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住" -"所とユーザを関連付けることができ、 パーソナライズされたデータの取り扱いを容易" -"にします。" +"場所の詳細とユーザーとの関連付けを含む住所エンティティを表します。地理データおよび住所データを保存する機能と、ジオコーディングサービスとの統合機能を提供します。このクラスは、street、city、region、country、geolocation" +" (longitude and latitude) のようなコンポーネントを含む詳細な住所情報を格納するように設計されています。ジオコーディング API" +" との統合をサポートしており、 生の API " +"レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " +"パーソナライズされたデータの取り扱いを容易にします。" #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2257,11 +2159,9 @@ msgid "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." msgstr "" -"割引に使用できるプロモーションコードを表し、その有効期間、割引の種類、適用を" -"管理します。PromoCode クラスは、一意の識別子、割引のプロパティ (金額または" -"パーセンテージ)、有効期間、関連するユーザ (もしあれば)、および使用状況など、" -"プロモーションコードに関する詳細を格納します。これは、制約が満たされているこ" -"とを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" +"割引に使用できるプロモーションコードを表し、その有効期間、割引の種類、適用を管理します。PromoCode クラスは、一意の識別子、割引のプロパティ " +"(金額またはパーセンテージ)、有効期間、関連するユーザ " +"(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" @@ -2331,9 +2231,7 @@ msgstr "プロモコード" msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." -msgstr "" -"割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちら" -"も定義してはならない。" +msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" #: engine/core/models.py:1171 msgid "promocode already used" @@ -2348,16 +2246,12 @@ msgstr "プロモコード {self.uuid} の割引タイプが無効です!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" -"ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連" -"するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内" -"の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを" -"適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、" -"注文のライフサイクルにおける商品の管理もサポートします。" +"ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。" #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2389,8 +2283,7 @@ msgstr "注文状況" #: engine/core/models.py:1243 engine/core/models.py:1769 msgid "json structure of notifications to display to users" -msgstr "" -"ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" +msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" #: engine/core/models.py:1249 msgid "json representation of order attributes for this order" @@ -2490,17 +2383,13 @@ msgstr "注文を完了するための資金不足" msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -msgstr "" -"ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お" -"客様のお名前、お客様のEメール、お客様の電話番号" +msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" #: engine/core/models.py:1584 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"支払方法が無効です:{available_payment_methods}からの{payment_method}が無効で" -"す!" +msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" #: engine/core/models.py:1699 msgid "" @@ -2510,11 +2399,7 @@ msgid "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." msgstr "" -"製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の" -"商品に対するユーザのフィードバックを取得し、保存するために設計されています。" -"ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存" -"する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、" -"管理するためにデータベースフィールドを使用します。" +"製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。" #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2525,7 +2410,8 @@ msgid "feedback comments" msgstr "フィードバック・コメント" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" #: engine/core/models.py:1720 @@ -2552,13 +2438,7 @@ msgid "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." msgstr "" -"注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商" -"品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持し" -"ます。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加" -"などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウ" -"ンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提" -"供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を" -"保存します。" +"注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" #: engine/core/models.py:1757 msgid "the price paid by the customer for this product at purchase time" @@ -2666,15 +2546,12 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" -"注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownload" -"クラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供しま" -"す。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開され" -"ているかどうかの情報を保持します。関連する注文が完了したステータスのときに、" -"アセットをダウンロードするための URL を生成するメソッドも含まれています。" +"注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" +" URL を生成するメソッドも含まれています。" #: engine/core/models.py:1961 msgid "download" @@ -2687,9 +2564,7 @@ msgstr "ダウンロード" #: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力す" -"る必要があります。" +msgstr "フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力する必要があります。" #: engine/core/sitemaps.py:25 msgid "Home" @@ -2732,12 +2607,9 @@ msgstr "こんにちは%(order.user.first_name)s、" #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" -msgstr "" -"ご注文ありがとうございます#%(order.pk)s!ご注文を承りましたことをお知らせいた" -"します。以下、ご注文の詳細です:" +msgstr "ご注文ありがとうございます#%(order.pk)s!ご注文を承りましたことをお知らせいたします。以下、ご注文の詳細です:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2760,9 +2632,7 @@ msgstr "合計価格" msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." -msgstr "" -"ご不明な点がございましたら、%(config.EMAIL_HOST_USER)sまでお気軽にお問い合わ" -"せください。" +msgstr "ご不明な点がございましたら、%(config.EMAIL_HOST_USER)sまでお気軽にお問い合わせください。" #: engine/core/templates/digital_order_created_email.html:133 #, python-format @@ -2790,8 +2660,7 @@ msgstr "こんにちは%(user_first_name)s、" msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" -msgstr "" -"ご注文の№%(order_uuid)sが正常に処理されました!以下はご注文の詳細です:" +msgstr "ご注文の№%(order_uuid)sが正常に処理されました!以下はご注文の詳細です:" #: engine/core/templates/digital_order_delivered_email.html:128 msgid "" @@ -2812,9 +2681,7 @@ msgstr "価値" msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." -msgstr "" -"ご不明な点がございましたら、%(contact_email)sまでお気軽にお問い合わせくださ" -"い。" +msgstr "ご不明な点がございましたら、%(contact_email)sまでお気軽にお問い合わせください。" #: engine/core/templates/digital_order_delivered_email.html:165 #: engine/core/templates/promocode_granted_email.html:108 @@ -2846,12 +2713,9 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" -msgstr "" -"ご注文ありがとうございます!ご購入を確認させていただきました。以下、ご注文の" -"詳細です:" +msgstr "ご注文ありがとうございます!ご購入を確認させていただきました。以下、ご注文の詳細です:" #: engine/core/templates/shipped_order_created_email.html:123 #: engine/core/templates/shipped_order_delivered_email.html:123 @@ -2888,23 +2752,23 @@ msgstr "無効なタイムアウト値です。" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME}|注文確認| ご注文の確認" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME}|注文確認| 注文確認" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME}|ご注文は配送されますか?" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME}|注文を配信" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME}|プロモコード付与" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME}|プロモコード付与" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2917,17 +2781,14 @@ msgstr "NOMINATIM_URLパラメータを設定する必要があります!" #: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" -"画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてくだ" -"さい!" +msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてください!" #: engine/core/views.py:73 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -"サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポ" -"ンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。" +"サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。" #: engine/core/views.py:88 msgid "" @@ -2935,9 +2796,8 @@ msgid "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -"サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、" -"適切なサイトマップ詳細レスポンスを取得し、XML の Content-Type ヘッダを設定し" -"ます。" +"サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-" +"Type ヘッダを設定します。" #: engine/core/views.py:123 msgid "" @@ -2952,9 +2812,7 @@ msgstr "ウェブサイトのパラメータをJSONオブジェクトとして msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -msgstr "" -"指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などの" -"キャッシュ操作を行う。" +msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。" #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -2964,8 +2822,7 @@ msgstr "お問い合わせフォームの送信を処理する。" msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." -msgstr "" -"入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" +msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" #: engine/core/views.py:262 msgid "Handles global search queries." @@ -2978,14 +2835,10 @@ msgstr "登録なしでビジネスとして購入するロジックを扱う。 #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" -"この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイ" -"ルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを" -"示すHTTP 404エラーが発生します。" +"この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3014,31 +2867,25 @@ msgstr "ファビコンが見つかりません" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "ウェブサイトのファビコンへのリクエストを処理します。\n" -"この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試" -"みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示" -"す HTTP 404 エラーが発生します。" +"この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP " -"リクエストを処理し、 Django の admin インタフェースインデッ クスページにリダ" -"イレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使いま" -"す。" +"リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " +"インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "eVibes の現在のバージョンを返します。" -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3046,25 +2893,23 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"Evibes 関連の操作を管理するためのビューセットを定義します。EvibesViewSet クラ" -"スは ModelViewSet を継承し、Evibes エンティティに対する アクションや操作を扱" -"うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラ" -"スのサポート、 カスタマイズ可能なパーミッション、レンダリングフォーマットが含" -"まれます。" +"Evibes 関連の操作を管理するためのビューセットを定義します。EvibesViewSet クラスは ModelViewSet を継承し、Evibes" +" エンティティに対する アクションや操作を扱うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラスのサポート、 " +"カスタマイズ可能なパーミッション、レンダリングフォーマットが含まれます。" -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" -"AttributeGroup オブジェクトを管理するためのビューセットを表します。データの" -"フィルタリング、シリアライズ、取得など、AttributeGroup に関連する操作を処理し" -"ます。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroup" -"データの要求と応答を処理する標準化された方法を提供します。" +"AttributeGroup " +"オブジェクトを管理するためのビューセットを表します。データのフィルタリング、シリアライズ、取得など、AttributeGroup " +"に関連する操作を処理します。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroupデータの要求と応答を処理する標準化された方法を提供します。" -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3073,27 +2918,24 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"アプリケーション内でAttributeオブジェクトに関連する操作を処理する。Attribute " -"データと対話するための API エンドポイントのセットを提供します。このクラスは、" -"Attribute オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、" -"特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化さ" -"れた情報の取得など、返されるデータの動的な制御を可能にします。" +"アプリケーション内でAttributeオブジェクトに関連する操作を処理する。Attribute データと対話するための API " +"エンドポイントのセットを提供します。このクラスは、Attribute " +"オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化された情報の取得など、返されるデータの動的な制御を可能にします。" -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"AttributeValue オブジェクトを管理するためのビューセットです。このビューセット" -"は、 AttributeValue オブジェクトの一覧表示、取得、作成、更新、削除の機能を提" -"供し ます。Django REST Framework のビューセット機構と統合され、異なるアクショ" -"ンに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend を" -"通して提供されます。" +"AttributeValue オブジェクトを管理するためのビューセットです。このビューセットは、 AttributeValue " +"オブジェクトの一覧表示、取得、作成、更新、削除の機能を提供し ます。Django REST Framework " +"のビューセット機構と統合され、異なるアクションに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend " +"を通して提供されます。" -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3101,13 +2943,9 @@ msgid "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." msgstr "" -"Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システ" -"ム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの" -"取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可" -"されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制し" -"ます。" +"Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制します。" -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3115,11 +2953,10 @@ msgid "" "endpoints for Brand objects." msgstr "" "Brandインスタンスを管理するためのビューセットを表します。このクラスは Brand " -"オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django " -"の ViewSet フレームワークを使い、 Brand オブジェクトの API エンドポイントの実" -"装を簡素化します。" +"オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django の ViewSet フレームワークを使い、 Brand " +"オブジェクトの API エンドポイントの実装を簡素化します。" -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3129,14 +2966,12 @@ msgid "" "product details, applying permissions, and accessing related feedback of a " "product." msgstr "" -"システム内の `Product` モデルに関連する操作を管理する。このクラスは、商品の" -"フィルタリング、シリアライズ、特定のインスタンスに対する操作など、商品を管理" -"するためのビューセットを提供します。共通の機能を使うために `EvibesViewSet` を" -"継承し、 RESTful API 操作のために Django REST フレームワークと統合していま" -"す。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィー" -"ドバックにアクセスするためのメソッドを含みます。" +"システム内の `Product` " +"モデルに関連する操作を管理する。このクラスは、商品のフィルタリング、シリアライズ、特定のインスタンスに対する操作など、商品を管理するためのビューセットを提供します。共通の機能を使うために" +" `EvibesViewSet` を継承し、 RESTful API 操作のために Django REST " +"フレームワークと統合しています。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィードバックにアクセスするためのメソッドを含みます。" -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3144,97 +2979,81 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"Vendor オブジェクトを管理するためのビューセットを表します。このビューセットを" -"使用すると、 Vendor のデータを取得したりフィルタリングしたりシリアライズした" -"りすることができます。さまざまなアクションを処理するためのクエリセット、 フィ" -"ルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フ" -"レームワークを通して Vendor 関連リソースへの合理的なアクセスを提供することで" -"す。" +"Vendor オブジェクトを管理するためのビューセットを表します。このビューセットを使用すると、 Vendor " +"のデータを取得したりフィルタリングしたりシリアライズしたりすることができます。さまざまなアクションを処理するためのクエリセット、 " +"フィルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フレームワークを通して Vendor " +"関連リソースへの合理的なアクセスを提供することです。" -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" -"Feedback オブジェクトを扱うビューセットの表現。このクラスは、一覧表示、フィル" -"タリング、詳細の取得など、Feedback オブジェクトに関する操作を管理します。この" -"ビューセットの目的は、アクションごとに異なるシリアライザを提供し、アクセス可" -"能な Feedback オブジェクトのパーミッションベースの処理を実装することです。" -"ベースとなる `EvibesViewSet` を拡張し、Django のフィルタリングシステムを利用" -"してデータを取得します。" +"Feedback オブジェクトを扱うビューセットの表現。このクラスは、一覧表示、フィルタリング、詳細の取得など、Feedback " +"オブジェクトに関する操作を管理します。このビューセットの目的は、アクションごとに異なるシリアライザを提供し、アクセス可能な Feedback " +"オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django " +"のフィルタリングシステムを利用してデータを取得します。" -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" -"注文と関連する操作を管理するための ViewSet。このクラスは、注文オブジェクトを" -"取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録" -"ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理" -"するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアク" -"ションに基づいて複数のシリアライザを使用し、注文データを操作している間、それ" -"に応じてパーミッションを強制します。" +"注文と関連する操作を管理するための " +"ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" -"OrderProduct エンティティを管理するためのビューセットを提供します。このビュー" -"セットは、OrderProduct モデルに固有の CRUD 操作とカスタムアクションを可能にし" -"ます。これは、要求されたアクションに基づくフィルタリング、パーミッション" -"チェック、シリアライザーの切り替えを含みます。さらに、OrderProduct インスタン" -"スに関するフィードバックを処理するための詳細なアクションを提供します。" +"OrderProduct エンティティを管理するためのビューセットを提供します。このビューセットは、OrderProduct モデルに固有の CRUD " +"操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" +" インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "アプリケーション内の商品画像に関する操作を管理します。" -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -msgstr "" -"様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" +msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "プロモーションを管理するためのビューセットを表します。" -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "システム内のストックデータに関する操作を行う。" -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" -"ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーの" -"ウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の" -"商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト" -"商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッ" -"ションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理でき" -"るよう、パーミッションチェックが統合されています。" +"ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3242,18 +3061,16 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"このクラスは `Address` オブジェクトを管理するためのビューセット機能を提供す" -"る。AddressViewSet クラスは、住所エンティティに関連する CRUD 操作、フィルタリ" -"ング、カスタムアクションを可能にします。異なる HTTP メソッドに特化した振る舞" -"いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッ" -"ション処理などを含みます。" +"このクラスは `Address` オブジェクトを管理するためのビューセット機能を提供する。AddressViewSet " +"クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " +"メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3261,8 +3078,4 @@ msgid "" "using the specified filter backend and dynamically uses different " "serializers based on the action being performed." msgstr "" -"アプリケーション内で商品タグに関連する操作を処理します。このクラスは、商品タ" -"グオブジェクトの取得、フィルタリング、シリアライズの機能を提供します。指定さ" -"れたフィルタバックエンドを使用して特定の属性に対する柔軟なフィルタリングをサ" -"ポートし、実行されるアクションに基づいて動的に異なるシリアライザを使用しま" -"す。" +"アプリケーション内で商品タグに関連する操作を処理します。このクラスは、商品タグオブジェクトの取得、フィルタリング、シリアライズの機能を提供します。指定されたフィルタバックエンドを使用して特定の属性に対する柔軟なフィルタリングをサポートし、実行されるアクションに基づいて動的に異なるシリアライザを使用します。" diff --git a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po index f3940385..1463c6e9 100644 --- a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -49,89 +49,89 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "" @@ -194,7 +194,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -216,7 +216,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "" @@ -344,9 +344,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "" @@ -450,7 +450,7 @@ msgstr "" msgid "retrieves a current pending order of an authenticated user" msgstr "" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "" @@ -614,6 +614,9 @@ msgid "Product UUID or slug" msgstr "" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "" @@ -1026,296 +1029,296 @@ msgstr "" msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "" -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:204 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1323,7 +1326,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1331,39 +1334,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1371,98 +1374,98 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "" @@ -2693,22 +2696,22 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" +msgid "{settings.PROJECT_NAME} | contact us initiated" msgstr "" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" +msgid "{settings.PROJECT_NAME} | order confirmation" msgstr "" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" +msgid "{settings.PROJECT_NAME} | order delivered" msgstr "" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" msgstr "" #: engine/core/utils/messages.py:3 @@ -2821,7 +2824,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2830,7 +2833,7 @@ msgid "" "and rendering formats." msgstr "" -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2838,7 +2841,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2848,7 +2851,7 @@ msgid "" "depending on the request." msgstr "" -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2857,7 +2860,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2866,7 +2869,7 @@ msgid "" "can access specific data." msgstr "" -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2874,7 +2877,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2885,7 +2888,7 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2894,7 +2897,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2904,7 +2907,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2915,7 +2918,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2924,25 +2927,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2953,7 +2956,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2962,12 +2965,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.mo b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo index 20b2667c8090dbf63b25a094128745551829cb38..aa9daa5062d5105ef07f6d72a0039974fc33d24c 100644 GIT binary patch delta 5463 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 Wbj=qfUdaDt#fJX$qMF1~FXexMRNM{# delta 5434 zcmYk=dz8<09>?+b_lGdV^E&WsZcwc zv1NC&Y=uLsX;GZWB`u0JmyKGq*<89wC~UjW*YERj&id!^dB4Ax&;9fLja~a|Y}#Mr zFE<*7oy;tIyIBXEfyr2bskqhW&tOa9*d1o2fmu4n6IZ-z_B8Q2yp=d}mst$<$6Ih1 zHo#HX7-wQ_46!vX+GU|tqp*gAT#psF5$ocB-DYuEj0rds58$(?3dZhn_m$v68ZsMm z$p7%3Suf1k>z=zGJ~SIhKIIU-#b00w`SugTlkE=QmI-vLj~A zp*1$cY}C+>LJeIh#$q{Y1VSG##3JHKtQ9dkhck%3KW288ipT%MYzg*1?%wzD31@hk z!tLDnE$W5sKQ+t3PDtl%8g|8QpPBKjm7?zJ^G~xnn1?N}7}rq2eW>eAPqAi*+h7b0 z$~jHt#0CE{J4n3bi|F;xCVgpkm<#jHn%#p%=bhUwxE3dWZT2b;Z2E>?aedN7vzo*M zFPUwoqQc8e3;9}Cm|OBguM(4ghaVk7bkkhNvYP(6PUwVPIA8XiDR z-8Fx`dR=#49sD)*TLTJOM9Wayr%AoQs$(M7!xU_YJur<14#qq2;n=`>lHb-Kuugax zHFXIM0~>@BFb`ivHQ*b}!5=XLdo&6x>_}l2g>G1hiuYj(UctMtb>kqq-|zK4fyv}o zU?%QH?VjuYdRCmfzXrf-~7PiA3ag4t%oFSp1yyS1F6(3j`aebVGzeH`T z!#?iVB#7>Ur?E5nmr&2|$EJ7+wR^7N8`!w1o3i&&4XD-3jcEO5VGuoN5=p2bUHpX{ z)Q!bHKNjPOr~5d>+lUvVrtFX2wf_2FQP1x}HEf^HpTy?GU!z96cGx_KZm(Xbo|L18 z{tu`M_o7~O617eLjhf3AE!_1a)OnEO9fs<83F^K_Q5}2I=PP`?!5eO)pdRc)EwUr1 zmYu_BMQq}_#7U^@89vVU@d%6~Kf~ukpMTc-viD7F%YE;o-g_SDSZF`Ef?Y?oG}6lT zI2IMhqbhFi^I6_ppU+1%V7!m#poV-Qw#JuGBeWGYG6($iFQYO0?*;|EAilL5(sWdu zhk9_L&zGa-e4)=T_pU+p=xt2L-I#!vuqDQ|39LJI#{!&*!>|ftwg0QNbvOnqgu@zwv zjzP72EvjKBu@`=adM+)|nT={t0qXgQSRYHhb5RG+6R5Sc%g2Wj+5bAR>bG+j3NVp) z6i&xSP(%1RYTHcKW-SSCr}N33w8ev z?}w<7`4n}|gbg~mk3}{{S2ya&U5>eU74?FiX|AF?RD(uiSDb_D*=n4H2T@~yyq z`kO5w#26L;WN>?(=PWxQ5)`!+-z#k8TQp+@3)9ES%`Ba)mI*hrj+8i^`YgWt_!|Eq$dBy=);hKkSo8!w_N z{I56m4)bpY#3=TM+Mqtag{b^`tc`E__#M<@ z-GkciU!vB~kEjORI@~p=Ickyj@{SHEXfEeqbdK<4;<_UOdkoiOdrTkc?i+zR@mAv? z`~Y>rH5ujZ8;bhO&PCn#J50r$sBQQa>K9kj(Qb`}!znZ*@gQokJ%gH(w^2jhaEv=r z$D^(_-wg=$zg9}htd`4rUoun@Cx1M2znI0vtyeoNjn$u;Cp zIFkD90}2|-#K}SQzfv+#FDOLy=vmbDRoEA+a1>s~LcFWQP1Wx)m-vh~X^NZc>8Q1` z5{vLFpU;`fU)hUDJVZhJIC8gJEQP3pb;Na)|=RSP;yt`_-Kq~i0m zwYq6Z`ohTkNL5_toZF~Eh#dF&e zZWbHvNUX@-UQm^}\n" "Language-Team: BRITISH ENGLISH \n" @@ -27,7 +27,8 @@ msgstr "활성 상태" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "false로 설정하면 필요한 권한이 없는 사용자는 이 개체를 볼 수 없습니다." #: engine/core/abstract.py:23 engine/core/choices.py:18 @@ -46,89 +47,89 @@ msgstr "수정됨" msgid "when the object was last modified" msgstr "개체가 마지막으로 편집된 시기" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "번역" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "일반" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "관계" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "추가 정보" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "메타데이터" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "타임스탬프" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "선택한 %(verbose_name_plural)s 활성화" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "선택한 아이템이 활성화되었습니다!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "선택한 %(verbose_name_plural)s 비활성화하기" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "선택한 아이템이 비활성화되었습니다!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "속성 값" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "속성 값" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "이미지" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "이미지" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "재고" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "주식" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "제품 주문" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "제품 주문" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "어린이" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "구성" @@ -152,7 +153,8 @@ msgstr "배달됨" msgid "canceled" msgstr "취소됨" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "실패" @@ -190,10 +192,10 @@ msgid "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." msgstr "" -"OpenApi3 스키마를 사용합니다. 형식은 콘텐츠 협상을 통해 선택할 수 있습니다. " -"언어는 Accept-Language와 쿼리 매개변수를 모두 사용하여 선택할 수 있습니다." +"OpenApi3 스키마를 사용합니다. 형식은 콘텐츠 협상을 통해 선택할 수 있습니다. 언어는 Accept-Language와 쿼리 " +"매개변수를 모두 사용하여 선택할 수 있습니다." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "캐시 I/O" @@ -217,7 +219,7 @@ msgstr "애플리케이션의 노출 가능한 매개변수 가져오기" msgid "send a message to the support team" msgstr "지원팀에 메시지 보내기" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "CORSed URL을 요청합니다. https만 허용됩니다." @@ -237,9 +239,7 @@ msgstr "비즈니스로 주문 구매" msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." -msgstr "" -"제공된 '제품'과 '제품_uuid' 및 '속성'을 사용하여 비즈니스로서 주문을 구매합니" -"다." +msgstr "제공된 '제품'과 '제품_uuid' 및 '속성'을 사용하여 비즈니스로서 주문을 구매합니다." #: engine/core/docs/drf/views.py:164 msgid "download a digital asset from purchased digital order" @@ -266,9 +266,9 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 속성 그룹 다시 작성하기" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" -"기존 속성 그룹의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" +msgstr "기존 속성 그룹의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." #: engine/core/docs/drf/viewsets.py:106 msgid "list all attributes (simple view)" @@ -315,9 +315,9 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "편집할 수 없는 기존 속성 값을 저장하여 다시 작성하기" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" -"기존 속성 값의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" +msgstr "기존 속성 값의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 msgid "list all categories (simple view)" @@ -349,9 +349,9 @@ msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일 #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO 메타 스냅샷" @@ -369,11 +369,11 @@ msgstr "직원이 아닌 사용자의 경우 자신의 주문만 반환됩니다 #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"대소문자를 구분하지 않는 하위 문자열 검색(human_readable_id, order_products." -"product.name 및 order_products.product.partnerumber)" +"대소문자를 구분하지 않는 하위 문자열 검색(human_readable_id, order_products.product.name 및 " +"order_products.product.partnerumber)" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -405,13 +405,12 @@ msgstr "주문 상태별 필터링(대소문자를 구분하지 않는 하위 #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" -"uuid, human_readable_id, user_email, 사용자, 상태, 생성됨, 수정됨, 구매 시" -"간, 무작위 중 하나로 정렬합니다. 접두사 앞에 '-'를 붙여 내림차순으로 정렬합니" -"다(예: '-buy_time')." +"uuid, human_readable_id, user_email, 사용자, 상태, 생성됨, 수정됨, 구매 시간, 무작위 중 하나로 " +"정렬합니다. 접두사 앞에 '-'를 붙여 내림차순으로 정렬합니다(예: '-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -451,8 +450,7 @@ msgid "" "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -"주문 구매를 완료합니다. 강제 잔액`을 사용하면 사용자의 잔액을 사용하여 구매" -"가 완료되고, `강제 결제`를 사용하면 거래가 시작됩니다." +"주문 구매를 완료합니다. 강제 잔액`을 사용하면 사용자의 잔액을 사용하여 구매가 완료되고, `강제 결제`를 사용하면 거래가 시작됩니다." #: engine/core/docs/drf/viewsets.py:397 msgid "retrieve current pending order of a user" @@ -462,7 +460,7 @@ msgstr "사용자의 현재 대기 주문 검색하기" msgid "retrieves a current pending order of an authenticated user" msgstr "인증된 사용자의 현재 대기 주문을 검색합니다." -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "계정 생성 없이 주문 구매" @@ -478,8 +476,7 @@ msgstr "주문에 제품 추가" msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." -msgstr "" -"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품을 추가합니다." +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품을 추가합니다." #: engine/core/docs/drf/viewsets.py:429 msgid "add a list of products to order, quantities will not count" @@ -489,9 +486,7 @@ msgstr "주문할 제품 목록을 추가하면 수량은 계산되지 않습니 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." -msgstr "" -"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품 목록을 추가합니" -"다." +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품 목록을 추가합니다." #: engine/core/docs/drf/viewsets.py:438 msgid "remove product from order" @@ -501,8 +496,7 @@ msgstr "주문에서 제품 제거" msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." -msgstr "" -"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품을 제거합니다." +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품을 제거합니다." #: engine/core/docs/drf/viewsets.py:447 msgid "remove product from order, quantities will not count" @@ -512,9 +506,7 @@ msgstr "주문에서 제품을 제거하면 수량이 계산되지 않습니다. msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" -msgstr "" -"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품 목록을 제거합" -"니다." +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품 목록을 제거합니다." #: engine/core/docs/drf/viewsets.py:459 msgid "list all wishlists (simple view)" @@ -587,34 +579,24 @@ msgstr "주문에서 제품 제거" #: engine/core/docs/drf/viewsets.py:542 msgid "" "removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"제공된 `product_uuids`를 사용하여 위시리스트에서 많은 제품을 제거합니다." +msgstr "제공된 `product_uuids`를 사용하여 위시리스트에서 많은 제품을 제거합니다." #: engine/core/docs/drf/viewsets.py:549 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "하나 이상의 속성 이름/값 쌍을 기준으로 필터링합니다. \n" "- 구문**: `attr_name=메소드-값[;attr2=메소드2-값2]...`\n" -"- **방법**(생략 시 기본값은 `icontains`): `iexact`, `exact`, `icontains`, " -"`contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, " -"`regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"- **값 입력**: JSON이 먼저 시도되며(목록/딕을 전달할 수 있도록), 부울, 정수, " -"부동 소수점의 경우 `true`/`false`, 그렇지 않으면 문자열로 처리됩니다. \n" -"- Base64**: 접두사 앞에 `b64-`를 추가하여 URL에 안전한 base64로 원시 값을 인" -"코딩합니다. \n" +"- **방법**(생략 시 기본값은 `icontains`): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- **값 입력**: JSON이 먼저 시도되며(목록/딕을 전달할 수 있도록), 부울, 정수, 부동 소수점의 경우 `true`/`false`, 그렇지 않으면 문자열로 처리됩니다. \n" +"- Base64**: 접두사 앞에 `b64-`를 추가하여 URL에 안전한 base64로 원시 값을 인코딩합니다. \n" "예시: \n" "색상=정확-빨간색`, `크기=gt-10`, `기능=in-[\"wifi\",\"블루투스\"]`,\n" "b64-description=icontains-aGVhdC1jb2xk`" @@ -629,12 +611,10 @@ msgstr "(정확한) 제품 UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"정렬할 필드의 쉼표로 구분된 목록입니다. 접두사 앞에 `-`를 붙여 내림차순으로 " -"정렬합니다. \n" +"정렬할 필드의 쉼표로 구분된 목록입니다. 접두사 앞에 `-`를 붙여 내림차순으로 정렬합니다. \n" "**허용됨:** uuid, 등급, 이름, 슬러그, 생성, 수정, 가격, 랜덤" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -648,6 +628,9 @@ msgid "Product UUID or slug" msgstr "제품 UUID 또는 슬러그" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "제품 만들기" @@ -730,8 +713,7 @@ msgstr "편집할 수 없는 기존 피드백을 다시 작성합니다." #: engine/core/docs/drf/viewsets.py:851 msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." +msgstr "기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." #: engine/core/docs/drf/viewsets.py:861 msgid "list all order–product relations (simple view)" @@ -1013,8 +995,7 @@ msgstr "SKU" #: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." +msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." #: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" @@ -1062,298 +1043,297 @@ msgstr "레벨" msgid "Product UUID" msgstr "제품 UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "캐시에서 찾거나 캐시에 설정할 키" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "캐시에 저장할 데이터" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "캐시에 저장할 데이터를 설정하는 데 걸리는 시간(초)" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "캐시된 데이터" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://로 시작하는 URL만 허용됩니다." -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "주문에 제품 추가" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "주문 {order_uuid}을 찾을 수 없습니다!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "주문에서 모든 제품 제거" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "주문 구매" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "제품 목록에 대한 작업을 순서대로 수행합니다." -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "제거/추가" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "작업은 \"추가\" 또는 \"제거\"여야 합니다!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "위시리스트의 제품 목록에서 작업 수행하기" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "위시리스트_유아이디` 값을 입력하세요." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "위시리스트 {wishlist_uuid}를 찾을 수 없습니다!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "주문에 제품 추가" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "주문 구매" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "속성을 attr1=value1,attr2=value2와 같은 형식의 문자열로 보내주세요." -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "주문 제품에 대한 피드백 추가 또는 삭제" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "작업은 '추가' 또는 '제거' 중 하나여야 합니다!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "사용자가 제공한 원본 주소 문자열" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "한도는 1에서 10 사이여야 합니다." -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 마법처럼 작동" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "속성" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "그룹화된 속성" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "속성 그룹" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "카테고리" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "브랜드" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "카테고리" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "마크업 퍼센트" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "이 카테고리를 필터링하는 데 사용할 수 있는 속성 및 값입니다." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "이 카테고리의 제품에 대한 최소 및 최대 가격(가능한 경우)." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "이 카테고리의 태그" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "이 카테고리의 제품" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "공급업체" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "위도(Y 좌표)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "경도(X 좌표)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "방법" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1에서 10까지의 등급 값(포함) 또는 설정하지 않은 경우 0입니다." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "사용자의 피드백을 나타냅니다." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "알림" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "피드백" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "주문 제품 목록은 다음 순서로 표시됩니다." -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "청구서 수신 주소" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" -msgstr "" -"이 주문의 배송 주소는 청구지 주소와 동일하거나 해당되지 않는 경우 비워 둡니" -"다." +msgstr "이 주문의 배송 주소는 청구지 주소와 동일하거나 해당되지 않는 경우 비워 둡니다." -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "이 주문의 총 가격" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "주문한 제품의 총 수량" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "이 주문에 대한 거래" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "주문" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "이미지 URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "제품 이미지" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "카테고리" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "피드백" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "브랜드" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "속성 그룹" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1361,7 +1341,7 @@ msgstr "속성 그룹" msgid "price" msgstr "가격" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1369,39 +1349,39 @@ msgstr "가격" msgid "quantity" msgstr "수량" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "피드백 수" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "개인 주문만 가능한 제품" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "할인 가격" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "제품" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "프로모션 코드" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "판매 중인 제품" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "프로모션" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "공급업체" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1409,99 +1389,98 @@ msgstr "공급업체" msgid "product" msgstr "제품" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "위시리스트 제품" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "위시리스트" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "태그가 지정된 제품" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "제품 태그" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "태그가 지정된 카테고리" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "카테고리 태그" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "프로젝트 이름" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "회사 이름" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "회사 주소" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "회사 전화번호" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" -msgstr "" -"'이메일 보낸 사람'을 호스트 사용자 값 대신 사용해야 하는 경우가 있습니다." +msgstr "'이메일 보낸 사람'을 호스트 사용자 값 대신 사용해야 하는 경우가 있습니다." -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "이메일 호스트 사용자" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "최대 결제 금액" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "최소 결제 금액" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "애널리틱스 데이터" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "광고 데이터" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "구성" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "언어 코드" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "언어 이름" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "언어 플래그가 있는 경우 :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "지원되는 언어 목록 보기" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "제품 검색 결과" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "제품 검색 결과" @@ -1512,10 +1491,8 @@ msgid "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." msgstr "" -"계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구" -"성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 있으며 계층 구조를 형성" -"할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하" -"는 데 유용할 수 있습니다." +"계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 " +"있으며 계층 구조를 형성할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하는 데 유용할 수 있습니다." #: engine/core/models.py:91 msgid "parent of this group" @@ -1543,12 +1520,10 @@ msgid "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." msgstr "" -"외부 공급업체 및 해당 공급업체의 상호 작용 요구 사항에 대한 정보를 저장할 수 " -"있는 공급업체 엔티티를 나타냅니다. 공급업체 클래스는 외부 공급업체와 관련된 " -"정보를 정의하고 관리하는 데 사용됩니다. 공급업체의 이름, 통신에 필요한 인증 " -"세부 정보, 공급업체에서 검색한 제품에 적용된 마크업 비율을 저장합니다. 또한 " -"이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용" -"하는 시스템에서 사용하기에 적합합니다." +"외부 공급업체 및 해당 공급업체의 상호 작용 요구 사항에 대한 정보를 저장할 수 있는 공급업체 엔티티를 나타냅니다. 공급업체 클래스는 " +"외부 공급업체와 관련된 정보를 정의하고 관리하는 데 사용됩니다. 공급업체의 이름, 통신에 필요한 인증 세부 정보, 공급업체에서 검색한 " +"제품에 적용된 마크업 비율을 저장합니다. 또한 이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용하는 " +"시스템에서 사용하기에 적합합니다." #: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" @@ -1598,10 +1573,9 @@ msgid "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." msgstr "" -"제품을 분류하거나 식별하는 데 사용되는 제품 태그를 나타냅니다. ProductTag 클" -"래스는 내부 태그 식별자와 사용자 친화적인 표시 이름의 조합을 통해 제품을 고유" -"하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하" -"며 관리 목적으로 메타데이터 사용자 지정을 제공합니다." +"제품을 분류하거나 식별하는 데 사용되는 제품 태그를 나타냅니다. ProductTag 클래스는 내부 태그 식별자와 사용자 친화적인 표시 " +"이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 " +"사용자 지정을 제공합니다." #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1629,9 +1603,8 @@ msgid "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -"제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류" -"하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부 태그 식별자 및 사용" -"자 친화적인 표시 이름에 대한 속성을 포함합니다." +"제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부" +" 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다." #: engine/core/models.py:254 msgid "category tag" @@ -1653,13 +1626,10 @@ msgid "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." msgstr "" -"관련 항목을 계층 구조로 정리하고 그룹화할 카테고리 엔티티를 나타냅니다. 카테" -"고리는 다른 카테고리와 계층적 관계를 가질 수 있으며, 상위-하위 관계를 지원합" -"니다. 이 클래스에는 카테고리 관련 기능의 기반이 되는 메타데이터 및 시각적 표" -"현을 위한 필드가 포함되어 있습니다. 이 클래스는 일반적으로 애플리케이션 내에" -"서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용" -"자나 관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또" -"는 우선순위와 같은 속성을 할당할 수 있도록 합니다." +"관련 항목을 계층 구조로 정리하고 그룹화할 카테고리 엔티티를 나타냅니다. 카테고리는 다른 카테고리와 계층적 관계를 가질 수 있으며, " +"상위-하위 관계를 지원합니다. 이 클래스에는 카테고리 관련 기능의 기반이 되는 메타데이터 및 시각적 표현을 위한 필드가 포함되어 " +"있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 " +"관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다." #: engine/core/models.py:274 msgid "upload an image representing this category" @@ -1710,11 +1680,11 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테" -"고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 및 속성을 처리합니다. 이" -"를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." +"시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " +"및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." #: engine/core/models.py:448 msgid "name of this brand" @@ -1758,17 +1728,16 @@ msgstr "카테고리" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" -"시스템에서 관리되는 제품의 재고를 나타냅니다. 이 클래스는 공급업체, 제품, 재" -"고 정보 간의 관계와 가격, 구매 가격, 수량, SKU 및 디지털 자산과 같은 재고 관" -"련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추" -"적하고 평가할 수 있도록 하는 재고 관리 시스템의 일부입니다." +"시스템에서 관리되는 제품의 재고를 나타냅니다. 이 클래스는 공급업체, 제품, 재고 정보 간의 관계와 가격, 구매 가격, 수량, SKU 및" +" 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" +" 재고 관리 시스템의 일부입니다." #: engine/core/models.py:520 msgid "the vendor supplying this product stock" @@ -1846,13 +1815,10 @@ msgid "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." msgstr "" -"카테고리, 브랜드, 태그, 디지털 상태, 이름, 설명, 부품 번호, 슬러그 등의 속성" -"을 가진 제품을 나타냅니다. 평점, 피드백 수, 가격, 수량, 총 주문 수 등을 검색" -"할 수 있는 관련 유틸리티 속성을 제공합니다. 이커머스 또는 재고 관리를 처리하" -"는 시스템에서 사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, " -"브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 캐싱을 관리하" -"여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하" -"고 조작하는 데 사용됩니다." +"카테고리, 브랜드, 태그, 디지털 상태, 이름, 설명, 부품 번호, 슬러그 등의 속성을 가진 제품을 나타냅니다. 평점, 피드백 수, " +"가격, 수량, 총 주문 수 등을 검색할 수 있는 관련 유틸리티 속성을 제공합니다. 이커머스 또는 재고 관리를 처리하는 시스템에서 " +"사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " +"캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." #: engine/core/models.py:585 msgid "category this product belongs to" @@ -1907,15 +1873,13 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"시스템의 속성을 나타냅니다. 이 클래스는 다른 엔티티와 연결할 수 있는 사용자 " -"지정 가능한 데이터 조각인 속성을 정의하고 관리하는 데 사용됩니다. 속성에는 연" -"관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실" -"수, 부울, 배열, 객체 등 여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연" -"한 데이터 구조화가 가능합니다." +"시스템의 속성을 나타냅니다. 이 클래스는 다른 엔티티와 연결할 수 있는 사용자 지정 가능한 데이터 조각인 속성을 정의하고 관리하는 데 " +"사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 " +"여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다." #: engine/core/models.py:733 msgid "group of this attribute" @@ -1976,12 +1940,12 @@ msgstr "속성" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제" -"품 특성을 더 잘 구성하고 동적으로 표현할 수 있습니다." +"상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제품 특성을 더 잘 구성하고 동적으로 표현할 수 " +"있습니다." #: engine/core/models.py:788 msgid "attribute of this value" @@ -1998,15 +1962,13 @@ msgstr "이 속성의 구체적인 값은 다음과 같습니다." #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" -"시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업" -"로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 포함하여 제품의 이미지" -"를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 " -"기능도 포함되어 있습니다." +"시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 " +"포함하여 제품의 이미지를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 기능도 포함되어 있습니다." #: engine/core/models.py:826 msgid "provide alternative text for the image for accessibility" @@ -2046,14 +2008,12 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"할인이 적용되는 제품에 대한 프로모션 캠페인을 나타냅니다. 이 클래스는 제품에 " -"대해 백분율 기반 할인을 제공하는 프로모션 캠페인을 정의하고 관리하는 데 사용" -"됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제" -"품에 대한 링크를 위한 속성이 포함되어 있습니다. 제품 카탈로그와 통합되어 캠페" -"인에서 영향을 받는 품목을 결정합니다." +"할인이 적용되는 제품에 대한 프로모션 캠페인을 나타냅니다. 이 클래스는 제품에 대해 백분율 기반 할인을 제공하는 프로모션 캠페인을 " +"정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " +"포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." #: engine/core/models.py:880 msgid "percentage discount for the selected products" @@ -2094,9 +2054,8 @@ msgid "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." msgstr "" -"원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클" -"래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및 제거와 같은 작업" -"을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." +"원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" +" 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2120,14 +2079,12 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"상품에 연결된 다큐멘터리 레코드를 나타냅니다. 이 클래스는 파일 업로드 및 메타" -"데이터를 포함하여 특정 제품과 관련된 다큐멘터리에 대한 정보를 저장하는 데 사" -"용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드" -"와 프로퍼티가 포함되어 있습니다. 특정 믹스인의 기능을 확장하고 추가 사용자 정" -"의 기능을 제공합니다." +"상품에 연결된 다큐멘터리 레코드를 나타냅니다. 이 클래스는 파일 업로드 및 메타데이터를 포함하여 특정 제품과 관련된 다큐멘터리에 대한 " +"정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" +" 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." #: engine/core/models.py:998 msgid "documentary" @@ -2143,22 +2100,19 @@ msgstr "해결되지 않음" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" -"위치 세부 정보 및 사용자와의 연결을 포함하는 주소 엔티티를 나타냅니다. 지리" -"적 및 주소 데이터 저장과 지오코딩 서비스와의 통합을 위한 기능을 제공합니다. " -"이 클래스는 거리, 도시, 지역, 국가, 지리적 위치(경도 및 위도)와 같은 구성 요" -"소를 포함한 상세한 주소 정보를 저장하도록 설계되었습니다. 지오코딩 API와의 통" -"합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. " -"또한 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용" -"이하게 할 수 있습니다." +"위치 세부 정보 및 사용자와의 연결을 포함하는 주소 엔티티를 나타냅니다. 지리적 및 주소 데이터 저장과 지오코딩 서비스와의 통합을 위한 " +"기능을 제공합니다. 이 클래스는 거리, 도시, 지역, 국가, 지리적 위치(경도 및 위도)와 같은 구성 요소를 포함한 상세한 주소 정보를 " +"저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" +" 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2221,11 +2175,9 @@ msgid "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." msgstr "" -"할인에 사용할 수 있는 프로모션 코드를 나타내며, 유효 기간, 할인 유형 및 적용" -"을 관리합니다. 프로모션 코드 클래스는 고유 식별자, 할인 속성(금액 또는 백분" -"율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세" -"부 정보를 저장합니다. 여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코" -"드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." +"할인에 사용할 수 있는 프로모션 코드를 나타내며, 유효 기간, 할인 유형 및 적용을 관리합니다. 프로모션 코드 클래스는 고유 식별자, " +"할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " +"여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" @@ -2295,9 +2247,7 @@ msgstr "프로모션 코드" msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." -msgstr "" -"할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또" -"는 둘 다 정의해서는 안 됩니다." +msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다." #: engine/core/models.py:1171 msgid "promocode already used" @@ -2312,16 +2262,14 @@ msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" -"사용자가 진행한 주문을 나타냅니다. 이 클래스는 청구 및 배송 정보, 상태, 연결" -"된 사용자, 알림 및 관련 작업과 같은 다양한 속성을 포함하여 애플리케이션 내에" -"서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 " -"또는 청구 세부 정보 업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관" -"리하는 기능도 지원합니다." +"사용자가 진행한 주문을 나타냅니다. 이 클래스는 청구 및 배송 정보, 상태, 연결된 사용자, 알림 및 관련 작업과 같은 다양한 속성을 " +"포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 " +"업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다." #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2353,8 +2301,7 @@ msgstr "주문 상태" #: engine/core/models.py:1243 engine/core/models.py:1769 msgid "json structure of notifications to display to users" -msgstr "" -"사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." +msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." #: engine/core/models.py:1249 msgid "json representation of order attributes for this order" @@ -2454,17 +2401,13 @@ msgstr "주문을 완료하기에 자금이 부족합니다." msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -msgstr "" -"등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등" -"의 정보를 제공하세요." +msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요." #: engine/core/models.py:1584 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}" -"로!" +msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!" #: engine/core/models.py:1699 msgid "" @@ -2474,11 +2417,9 @@ msgid "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." msgstr "" -"제품에 대한 사용자 피드백을 관리합니다. 이 클래스는 사용자가 구매한 특정 제품" -"에 대한 사용자 피드백을 캡처하고 저장하도록 설계되었습니다. 여기에는 사용자 " -"댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성" -"이 포함되어 있습니다. 이 클래스는 데이터베이스 필드를 사용하여 피드백 데이터" -"를 효과적으로 모델링하고 관리합니다." +"제품에 대한 사용자 피드백을 관리합니다. 이 클래스는 사용자가 구매한 특정 제품에 대한 사용자 피드백을 캡처하고 저장하도록 " +"설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이" +" 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다." #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2489,7 +2430,8 @@ msgid "feedback comments" msgstr "피드백 댓글" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." #: engine/core/models.py:1720 @@ -2516,13 +2458,10 @@ msgid "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." msgstr "" -"주문과 관련된 제품 및 해당 속성을 나타냅니다. 주문 제품 모델은 구매 가격, 수" -"량, 제품 속성 및 상태 등의 세부 정보를 포함하여 주문의 일부인 제품에 대한 정" -"보를 유지 관리합니다. 사용자 및 관리자에 대한 알림을 관리하고 제품 잔액 반환 " -"또는 피드백 추가와 같은 작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디" -"지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 제" -"공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장" -"합니다." +"주문과 관련된 제품 및 해당 속성을 나타냅니다. 주문 제품 모델은 구매 가격, 수량, 제품 속성 및 상태 등의 세부 정보를 포함하여 " +"주문의 일부인 제품에 대한 정보를 유지 관리합니다. 사용자 및 관리자에 대한 알림을 관리하고 제품 잔액 반환 또는 피드백 추가와 같은 " +"작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " +"제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." #: engine/core/models.py:1757 msgid "the price paid by the customer for this product at purchase time" @@ -2630,15 +2569,13 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" -"주문과 관련된 디지털 자산의 다운로드 기능을 나타냅니다. 디지털 자산 다운로드 " -"클래스는 주문 상품과 관련된 다운로드를 관리하고 액세스할 수 있는 기능을 제공" -"합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 " -"대한 정보를 유지 관리합니다. 여기에는 연결된 주문이 완료 상태일 때 자산을 다" -"운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." +"주문과 관련된 디지털 자산의 다운로드 기능을 나타냅니다. 디지털 자산 다운로드 클래스는 주문 상품과 관련된 다운로드를 관리하고 액세스할 " +"수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " +"여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." #: engine/core/models.py:1961 msgid "download" @@ -2694,12 +2631,10 @@ msgstr "안녕하세요 %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" -"주문해 주셔서 감사합니다 #%(order.pk)s! 주문하신 상품이 입고되었음을 알려드립" -"니다. 주문 세부 정보는 아래와 같습니다:" +"주문해 주셔서 감사합니다 #%(order.pk)s! 주문하신 상품이 입고되었음을 알려드립니다. 주문 세부 정보는 아래와 같습니다:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2722,8 +2657,7 @@ msgstr "총 가격" msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." -msgstr "" -"궁금한 점이 있으면 언제든지 %(config.EMAIL_HOST_USER)s로 지원팀에 문의하세요." +msgstr "궁금한 점이 있으면 언제든지 %(config.EMAIL_HOST_USER)s로 지원팀에 문의하세요." #: engine/core/templates/digital_order_created_email.html:133 #, python-format @@ -2751,9 +2685,7 @@ msgstr "안녕하세요 %(user_first_name)s," msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" -msgstr "" -"주문이 성공적으로 처리되었습니다 №%(order_uuid)s! 주문 세부 정보는 아래와 같" -"습니다:" +msgstr "주문이 성공적으로 처리되었습니다 №%(order_uuid)s! 주문 세부 정보는 아래와 같습니다:" #: engine/core/templates/digital_order_delivered_email.html:128 msgid "" @@ -2806,12 +2738,9 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" -msgstr "" -"주문해 주셔서 감사합니다! 구매를 확인하게 되어 기쁩니다. 주문 세부 정보는 아" -"래와 같습니다:" +msgstr "주문해 주셔서 감사합니다! 구매를 확인하게 되어 기쁩니다. 주문 세부 정보는 아래와 같습니다:" #: engine/core/templates/shipped_order_created_email.html:123 #: engine/core/templates/shipped_order_delivered_email.html:123 @@ -2848,23 +2777,23 @@ msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | 문의 시작됨" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | 문의 시작됨" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | 주문 확인" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | 주문 확인" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | 주문 배송됨" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | 주문 배송" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | 프로모코드 부여됨" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | 프로모코드 부여됨" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2877,16 +2806,14 @@ msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" #: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" -"이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!" +msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!" #: engine/core/views.py:73 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -"사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합" -"한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다." +"사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다." #: engine/core/views.py:88 msgid "" @@ -2894,9 +2821,8 @@ msgid "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -"사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절" -"한 사이트맵 상세 보기 응답을 가져온 다음 XML의 Content-Type 헤더를 설정합니" -"다." +"사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 " +"Content-Type 헤더를 설정합니다." #: engine/core/views.py:123 msgid "" @@ -2911,9 +2837,7 @@ msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다." msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -msgstr "" -"지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니" -"다." +msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다." #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -2936,14 +2860,10 @@ msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니 #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" -"이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시" -"도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 " -"없음을 나타냅니다." +"이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -2972,30 +2892,25 @@ msgstr "파비콘을 찾을 수 없습니다." #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "웹사이트의 파비콘 요청을 처리합니다.\n" -"이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니" -"다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 " -"수 없음을 나타냅니다." +"이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처" -"리하여 Django 관리자 인터페이스 인덱스 페이지로 리디렉션합니다. HTTP 리디렉션" -"을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." +"요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " +"리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "현재 버전의 eVibes를 반환합니다." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3003,24 +2918,23 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"Evibes 관련 작업을 관리하기 위한 뷰셋을 정의합니다. EvibesViewSet 클래스는 " -"ModelViewSet에서 상속되며 Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능" -"을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용" -"자 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다." +"Evibes 관련 작업을 관리하기 위한 뷰셋을 정의합니다. EvibesViewSet 클래스는 ModelViewSet에서 상속되며 " +"Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용자" +" 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" -"속성 그룹 객체를 관리하기 위한 뷰셋을 나타냅니다. 데이터의 필터링, 직렬화, 검" -"색 등 AttributeGroup과 관련된 작업을 처리합니다. 이 클래스는 애플리케이션의 " -"API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준" -"화된 방법을 제공합니다." +"속성 그룹 객체를 관리하기 위한 뷰셋을 나타냅니다. 데이터의 필터링, 직렬화, 검색 등 AttributeGroup과 관련된 작업을 " +"처리합니다. 이 클래스는 애플리케이션의 API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준화된" +" 방법을 제공합니다." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3029,26 +2943,23 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"애플리케이션 내에서 속성 개체와 관련된 작업을 처리합니다. 속성 데이터와 상호 " -"작용할 수 있는 API 엔드포인트 세트를 제공합니다. 이 클래스는 속성 개체의 쿼" -"리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화" -"된 정보와 상세한 정보를 검색하는 등 반환되는 데이터를 동적으로 제어할 수 있도" -"록 합니다." +"애플리케이션 내에서 속성 개체와 관련된 작업을 처리합니다. 속성 데이터와 상호 작용할 수 있는 API 엔드포인트 세트를 제공합니다. 이 " +"클래스는 속성 개체의 쿼리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화된 정보와 상세한 정보를 검색하는 " +"등 반환되는 데이터를 동적으로 제어할 수 있도록 합니다." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"속성값 객체를 관리하기 위한 뷰셋입니다. 이 뷰셋은 AttributeValue 객체를 나" -"열, 검색, 생성, 업데이트 및 삭제하기 위한 기능을 제공합니다. 이 뷰셋은 장고 " -"REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사" -"용합니다. 필터링 기능은 DjangoFilterBackend를 통해 제공됩니다." +"속성값 객체를 관리하기 위한 뷰셋입니다. 이 뷰셋은 AttributeValue 객체를 나열, 검색, 생성, 업데이트 및 삭제하기 위한 " +"기능을 제공합니다. 이 뷰셋은 장고 REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사용합니다. 필터링 " +"기능은 DjangoFilterBackend를 통해 제공됩니다." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3056,23 +2967,21 @@ msgid "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." msgstr "" -"카테고리 관련 작업에 대한 보기를 관리합니다. CategoryViewSet 클래스는 시스템" -"에서 카테고리 모델과 관련된 작업을 처리하는 역할을 담당합니다. 카테고리 데이" -"터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용" -"자만 특정 데이터에 액세스할 수 있도록 권한을 적용합니다." +"카테고리 관련 작업에 대한 보기를 관리합니다. CategoryViewSet 클래스는 시스템에서 카테고리 모델과 관련된 작업을 처리하는 " +"역할을 담당합니다. 카테고리 데이터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용자만 특정 데이터에 " +"액세스할 수 있도록 권한을 적용합니다." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." msgstr "" -"브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 " -"쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 클래스는 장고의 뷰셋 프" -"레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다." +"브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 " +"클래스는 장고의 뷰셋 프레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3082,13 +2991,12 @@ msgid "" "product details, applying permissions, and accessing related feedback of a " "product." msgstr "" -"시스템에서 `Product` 모델과 관련된 작업을 관리합니다. 이 클래스는 필터링, 직" -"렬화 및 특정 인스턴스에 대한 작업을 포함하여 제품을 관리하기 위한 뷰셋을 제공" -"합니다. 이 클래스는 공통 기능을 사용하기 위해 `EvibesViewSet`에서 확장되며 " -"RESTful API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 " -"검색, 권한 적용, 제품의 관련 피드백에 액세스하는 메서드가 포함되어 있습니다." +"시스템에서 `Product` 모델과 관련된 작업을 관리합니다. 이 클래스는 필터링, 직렬화 및 특정 인스턴스에 대한 작업을 포함하여 " +"제품을 관리하기 위한 뷰셋을 제공합니다. 이 클래스는 공통 기능을 사용하기 위해 `EvibesViewSet`에서 확장되며 RESTful " +"API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 검색, 권한 적용, 제품의 관련 피드백에 액세스하는 " +"메서드가 포함되어 있습니다." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3096,94 +3004,84 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"벤더 객체를 관리하기 위한 뷰셋을 나타냅니다. 이 뷰셋을 통해 벤더 데이터를 가" -"져오고, 필터링하고, 직렬화할 수 있습니다. 다양한 작업을 처리하는 데 사용되는 " -"쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 " -"Django REST 프레임워크를 통해 공급업체 관련 리소스에 대한 간소화된 액세스를 " -"제공하는 것입니다." +"벤더 객체를 관리하기 위한 뷰셋을 나타냅니다. 이 뷰셋을 통해 벤더 데이터를 가져오고, 필터링하고, 직렬화할 수 있습니다. 다양한 작업을" +" 처리하는 데 사용되는 쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 Django REST 프레임워크를 " +"통해 공급업체 관련 리소스에 대한 간소화된 액세스를 제공하는 것입니다." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" -"피드백 개체를 처리하는 뷰 집합의 표현입니다. 이 클래스는 세부 정보 나열, 필터" -"링 및 검색을 포함하여 피드백 개체에 관련된 작업을 관리합니다. 이 뷰 세트의 목" -"적은 다양한 작업에 대해 서로 다른 직렬화기를 제공하고 접근 가능한 피드백 객체" -"에 대한 권한 기반 처리를 구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`" -"을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 사용합니다." +"피드백 개체를 처리하는 뷰 집합의 표현입니다. 이 클래스는 세부 정보 나열, 필터링 및 검색을 포함하여 피드백 개체에 관련된 작업을 " +"관리합니다. 이 뷰 세트의 목적은 다양한 작업에 대해 서로 다른 직렬화기를 제공하고 접근 가능한 피드백 객체에 대한 권한 기반 처리를 " +"구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 " +"사용합니다." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" -"주문 및 관련 작업을 관리하기 위한 뷰셋입니다. 이 클래스는 주문 객체를 검색, " -"수정, 관리하는 기능을 제공합니다. 여기에는 제품 추가 또는 제거, 등록 및 미등" -"록 사용자에 대한 구매 수행, 현재 인증된 사용자의 보류 중인 주문 검색 등 주문 " -"작업을 처리하기 위한 다양한 엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 " -"특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그" -"에 따라 권한을 적용합니다." +"주문 및 관련 작업을 관리하기 위한 뷰셋입니다. 이 클래스는 주문 객체를 검색, 수정, 관리하는 기능을 제공합니다. 여기에는 제품 추가 " +"또는 제거, 등록 및 미등록 사용자에 대한 구매 수행, 현재 인증된 사용자의 보류 중인 주문 검색 등 주문 작업을 처리하기 위한 다양한 " +"엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " +"권한을 적용합니다." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" -"주문 제품 엔티티를 관리하기 위한 뷰셋을 제공합니다. 이 뷰셋을 사용하면 주문 " -"제품 모델에 특정한 CRUD 작업 및 사용자 지정 작업을 수행할 수 있습니다. 여기에" -"는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또" -"한 주문 제품 인스턴스에 대한 피드백 처리를 위한 세부 작업도 제공합니다." +"주문 제품 엔티티를 관리하기 위한 뷰셋을 제공합니다. 이 뷰셋을 사용하면 주문 제품 모델에 특정한 CRUD 작업 및 사용자 지정 작업을 " +"수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" +" 피드백 처리를 위한 세부 작업도 제공합니다." -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -msgstr "" -"다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." +msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" -"위시리스트 작업을 관리하기 위한 뷰셋입니다. 위시리스트뷰셋은 사용자의 위시리" -"스트와 상호 작용할 수 있는 엔드포인트를 제공하여 위시리스트 내의 제품을 검" -"색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 " -"추가, 제거 및 대량 작업과 같은 기능을 용이하게 합니다. 명시적인 권한이 부여되" -"지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되" -"어 있습니다." +"위시리스트 작업을 관리하기 위한 뷰셋입니다. 위시리스트뷰셋은 사용자의 위시리스트와 상호 작용할 수 있는 엔드포인트를 제공하여 위시리스트 " +"내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을" +" 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3191,17 +3089,16 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"이 클래스는 `주소` 객체를 관리하기 위한 뷰셋 기능을 제공합니다. 주소 뷰셋 클" -"래스는 주소 엔티티와 관련된 CRUD 작업, 필터링 및 사용자 정의 작업을 가능하게 " -"합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권" -"한 처리를 위한 특수 동작이 포함되어 있습니다." +"이 클래스는 `주소` 객체를 관리하기 위한 뷰셋 기능을 제공합니다. 주소 뷰셋 클래스는 주소 엔티티와 관련된 CRUD 작업, 필터링 및 " +"사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " +"동작이 포함되어 있습니다." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "지오코딩 오류입니다: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3209,7 +3106,6 @@ msgid "" "using the specified filter backend and dynamically uses different " "serializers based on the action being performed." msgstr "" -"애플리케이션 내에서 제품 태그와 관련된 작업을 처리합니다. 이 클래스는 제품 태" -"그 객체를 검색, 필터링 및 직렬화하기 위한 기능을 제공합니다. 지정된 필터 백엔" -"드를 사용하여 특정 속성에 대한 유연한 필터링을 지원하며 수행 중인 작업에 따" -"라 다양한 직렬화기를 동적으로 사용합니다." +"애플리케이션 내에서 제품 태그와 관련된 작업을 처리합니다. 이 클래스는 제품 태그 객체를 검색, 필터링 및 직렬화하기 위한 기능을 " +"제공합니다. 지정된 필터 백엔드를 사용하여 특정 속성에 대한 유연한 필터링을 지원하며 수행 중인 작업에 따라 다양한 직렬화기를 동적으로 " +"사용합니다." diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.mo b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo index 352ac906cac8c2104464c83e9e4d318e79a29e73..c0ac67137ab3472d53fc49f6cb8fb0e876659e44 100644 GIT binary patch delta 5505 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 delta 5486 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 gi~OP@nnceon44e3Eya1)TCaN`&+E3XD%VT\n" "Language-Team: BRITISH ENGLISH \n" @@ -27,7 +27,8 @@ msgstr "Is actief" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Als false is ingesteld, kan dit object niet worden gezien door gebruikers " "zonder de benodigde toestemming" @@ -48,89 +49,89 @@ msgstr "Gewijzigd" msgid "when the object was last modified" msgstr "Wanneer het object voor het laatst bewerkt is" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Vertalingen" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Algemeen" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relaties" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "extra informatie" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metagegevens" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Tijdstempels" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activeer geselecteerde %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Geselecteerde items zijn geactiveerd!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactiveer geselecteerd %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Geselecteerde items zijn gedeactiveerd!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Attribuut Waarde" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Attribuutwaarden" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Afbeelding" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Afbeeldingen" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Voorraad" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Aandelen" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Product bestellen" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Producten bestellen" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Kinderen" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Config" @@ -154,7 +155,8 @@ msgstr "Geleverd" msgid "canceled" msgstr "Geannuleerd" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Mislukt" @@ -196,7 +198,7 @@ msgstr "" "inhoudsonderhandeling. Taal kan worden geselecteerd met zowel Accept-" "Language als query parameter." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -206,8 +208,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Alleen een sleutel gebruiken om toegestane gegevens uit de cache te lezen.\n" -"Sleutel, gegevens en time-out met verificatie toepassen om gegevens naar de " -"cache te schrijven." +"Sleutel, gegevens en time-out met verificatie toepassen om gegevens naar de cache te schrijven." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -221,7 +222,7 @@ msgstr "Verkrijg de blootstelbare parameters van de applicatie" msgid "send a message to the support team" msgstr "Stuur een bericht naar het ondersteuningsteam" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Vraag een CORSed URL op. Alleen https toegestaan." @@ -273,7 +274,8 @@ msgstr "" "opslaan" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Enkele velden van een bestaande attribuutgroep herschrijven door niet-" "wijzigbare velden op te slaan" @@ -328,7 +330,8 @@ msgstr "" "attributen worden opgeslagen" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande attribuutwaarde door niet-" "wijzigbare velden op te slaan" @@ -365,16 +368,17 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta momentopname" #: engine/core/docs/drf/viewsets.py:253 msgid "returns a snapshot of the category's SEO meta data" msgstr "" -"Geeft als resultaat een momentopname van de SEO-metagegevens van de categorie" +"Geeft als resultaat een momentopname van de SEO-metagegevens van de " +"categorie" #: engine/core/docs/drf/viewsets.py:274 msgid "list all orders (simple view)" @@ -383,15 +387,16 @@ msgstr "Alle categorieën weergeven (eenvoudige weergave)" #: engine/core/docs/drf/viewsets.py:275 msgid "for non-staff users, only their own orders are returned." msgstr "" -"Voor niet-personeelsleden worden alleen hun eigen bestellingen geretourneerd." +"Voor niet-personeelsleden worden alleen hun eigen bestellingen " +"geretourneerd." #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"Hoofdlettergevoelig substring zoeken in human_readable_id, order_products." -"product.name en order_products.product.partnumber" +"Hoofdlettergevoelig substring zoeken in human_readable_id, " +"order_products.product.name en order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -424,13 +429,13 @@ msgstr "Filter op bestelstatus (hoofdlettergevoelige substringmatch)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Sorteer op een van: uuid, human_readable_id, user_email, gebruiker, status, " -"gemaakt, gewijzigd, buy_time, willekeurig. Voorvoegsel met '-' voor aflopend " -"(bijv. '-buy_time')." +"gemaakt, gewijzigd, buy_time, willekeurig. Voorvoegsel met '-' voor aflopend" +" (bijv. '-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -484,14 +489,15 @@ msgstr "huidige lopende order van een gebruiker ophalen" msgid "retrieves a current pending order of an authenticated user" msgstr "haalt een huidige lopende order op van een geverifieerde gebruiker" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "een bestelling kopen zonder een account aan te maken" #: engine/core/docs/drf/viewsets.py:409 msgid "finalizes the order purchase for a non-registered user." msgstr "" -"Rondt de aankoop van de bestelling af voor een niet-geregistreerde gebruiker." +"Rondt de aankoop van de bestelling af voor een niet-geregistreerde " +"gebruiker." #: engine/core/docs/drf/viewsets.py:420 msgid "add product to order" @@ -635,28 +641,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filter op een of meer attribuutnaam-/waardeparen. \n" "- **Syntaxis**: `attr_name=methode-waarde[;attr2=methode2-waarde2]...`\n" -"- **Methodes** (standaard op `icontains` indien weggelaten): `iexact`, " -"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, " -"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" -"- Waarde typen**: JSON wordt eerst geprobeerd (zodat je lijsten/dicten kunt " -"doorgeven), `true`/`false` voor booleans, integers, floats; anders behandeld " -"als string. \n" -"- **Base64**: prefix met `b64-` om URL-veilige base64-encodering van de ruwe " -"waarde. \n" +"- **Methodes** (standaard op `icontains` indien weggelaten): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" +"- Waarde typen**: JSON wordt eerst geprobeerd (zodat je lijsten/dicten kunt doorgeven), `true`/`false` voor booleans, integers, floats; anders behandeld als string. \n" +"- **Base64**: prefix met `b64-` om URL-veilige base64-encodering van de ruwe waarde. \n" "Voorbeelden: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." @@ -671,14 +667,11 @@ msgstr "(exacte) UUID van product" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Door komma's gescheiden lijst van velden om op te sorteren. Voorvoegsel met " -"`-` voor aflopend. \n" -"**Toegestaan:** uuid, beoordeling, naam, slug, gemaakt, gewijzigd, prijs, " -"willekeurig" +"Door komma's gescheiden lijst van velden om op te sorteren. Voorvoegsel met `-` voor aflopend. \n" +"**Toegestaan:** uuid, beoordeling, naam, slug, gemaakt, gewijzigd, prijs, willekeurig" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -691,6 +684,9 @@ msgid "Product UUID or slug" msgstr "Product UUID of Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Een product maken" @@ -791,7 +787,8 @@ msgstr "alle order-productrelaties weergeven (eenvoudige weergave)" #: engine/core/docs/drf/viewsets.py:871 msgid "retrieve a single order–product relation (detailed view)" -msgstr "een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)" +msgstr "" +"een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)" #: engine/core/docs/drf/viewsets.py:881 msgid "create a new order–product relation" @@ -1135,249 +1132,250 @@ msgstr "Niveau" msgid "Product UUID" msgstr "Product UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Sleutel om te zoeken of te plaatsen in de cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Gegevens om op te slaan in de cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Time-out in seconden om de gegevens in de cache te plaatsen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Gecachte gegevens" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-gegevens van de opgevraagde URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Een product aan de bestelling toevoegen" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Bestelling {order_uuid} niet gevonden!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Alle producten uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Een bestelling kopen" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Een actie uitvoeren op een lijst met producten in de bestelling" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Verwijderen/toevoegen" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "De actie moet \"toevoegen\" of \"verwijderen\" zijn!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Een actie uitvoeren op een lijst met producten in het verlanglijstje" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Geef de waarde `wishlist_uuid` op." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "wens {wishlist_uuid} niet gevonden!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Een product aan de bestelling toevoegen" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Een bestelling kopen" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Stuur de attributen als de string opgemaakt als attr1=waarde1,attr2=waarde2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Feedback toevoegen of verwijderen voor het orderproduct" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "De actie moet `toevoegen` of `verwijderen` zijn!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} niet gevonden!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Originele adresstring geleverd door de gebruiker" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Limiet moet tussen 1 en 10 liggen" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - werkt als een charme" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Attributen" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Gegroepeerde kenmerken" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groepen van kenmerken" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Categorieën" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Merken" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorieën" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Opwaarderingspercentage" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Welke attributen en waarden kunnen worden gebruikt om deze categorie te " "filteren." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Minimale en maximale prijzen voor producten in deze categorie, indien " "beschikbaar." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags voor deze categorie" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Producten in deze categorie" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Verkopers" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breedtegraad (Y-coördinaat)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Lengtegraad (X-coördinaat)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Hoe" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Waarderingswaarde van 1 tot en met 10, of 0 indien niet ingesteld." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Vertegenwoordigt feedback van een gebruiker." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Meldingen" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url voor dit bestelproduct indien van toepassing" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Een lijst met bestelde producten in deze bestelling" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Factuuradres" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1385,53 +1383,53 @@ msgstr "" "Verzendadres voor deze bestelling, leeg laten als dit hetzelfde is als het " "factuuradres of als dit niet van toepassing is" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Totale prijs van deze bestelling" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Totale hoeveelheid producten in bestelling" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Zijn alle producten in de bestelling digitaal" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transacties voor deze bestelling" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Bestellingen" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Afbeelding URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Afbeeldingen van het product" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Categorie" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Reacties" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Merk" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribuutgroepen" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1439,7 +1437,7 @@ msgstr "Attribuutgroepen" msgid "price" msgstr "Prijs" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1447,39 +1445,39 @@ msgstr "Prijs" msgid "quantity" msgstr "Hoeveelheid" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Aantal terugkoppelingen" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Producten alleen beschikbaar voor persoonlijke bestellingen" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Korting" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Producten" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Producten te koop" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promoties" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Verkoper" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1487,100 +1485,100 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Gewenste producten" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Verlanglijst" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Getagde producten" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Product tags" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Getagde categorieën" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Categorieën' tags" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Naam project" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Bedrijfsnaam" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Adres" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Telefoonnummer bedrijf" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "e-mail van', soms moet deze worden gebruikt in plaats van de " "hostgebruikerswaarde" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Gebruiker e-mail hosten" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Maximumbedrag voor betaling" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Minimumbedrag voor betaling" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analytics-gegevens" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Advertentiegegevens" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configuratie" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Taalcode" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Naam van de taal" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Taalvlag, indien aanwezig :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Een lijst met ondersteunde talen opvragen" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Producten zoekresultaten" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Zoekresultaten" @@ -1594,8 +1592,8 @@ msgstr "" "Vertegenwoordigt een groep attributen, die hiërarchisch kan zijn. Deze " "klasse wordt gebruikt om groepen van attributen te beheren en te " "organiseren. Een attribuutgroep kan een bovenliggende groep hebben, die een " -"hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en " -"effectiever beheren van attributen in een complex systeem." +"hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en" +" effectiever beheren van attributen in een complex systeem." #: engine/core/models.py:91 msgid "parent of this group" @@ -1623,8 +1621,8 @@ msgid "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." msgstr "" -"Vertegenwoordigt een verkopersentiteit die informatie over externe verkopers " -"en hun interactievereisten kan opslaan. De klasse Vendor wordt gebruikt om " +"Vertegenwoordigt een verkopersentiteit die informatie over externe verkopers" +" en hun interactievereisten kan opslaan. De klasse Vendor wordt gebruikt om " "informatie over een externe verkoper te definiëren en te beheren. Het slaat " "de naam van de verkoper op, authenticatiegegevens die nodig zijn voor " "communicatie en het opmaakpercentage dat wordt toegepast op producten die " @@ -1685,8 +1683,8 @@ msgid "" msgstr "" "Vertegenwoordigt een producttag die wordt gebruikt om producten te " "classificeren of te identificeren. De klasse ProductTag is ontworpen om " -"producten uniek te identificeren en te classificeren door een combinatie van " -"een interne tagidentifier en een gebruiksvriendelijke weergavenaam. Het " +"producten uniek te identificeren en te classificeren door een combinatie van" +" een interne tagidentifier en een gebruiksvriendelijke weergavenaam. Het " "ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt " "aanpassing van metadata voor administratieve doeleinden." @@ -1744,12 +1742,12 @@ msgstr "" "Vertegenwoordigt een categorie-entiteit voor het organiseren en groeperen " "van gerelateerde items in een hiërarchische structuur. Categorieën kunnen " "hiërarchische relaties hebben met andere categorieën, waarbij ouder-kind " -"relaties worden ondersteund. De klasse bevat velden voor metadata en visuele " -"weergave, die dienen als basis voor categorie-gerelateerde functies. Deze " -"klasse wordt meestal gebruikt om productcategorieën of andere gelijksoortige " -"groeperingen binnen een applicatie te definiëren en te beheren, waarbij " -"gebruikers of beheerders de naam, beschrijving en hiërarchie van categorieën " -"kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit " +"relaties worden ondersteund. De klasse bevat velden voor metadata en visuele" +" weergave, die dienen als basis voor categorie-gerelateerde functies. Deze " +"klasse wordt meestal gebruikt om productcategorieën of andere gelijksoortige" +" groeperingen binnen een applicatie te definiëren en te beheren, waarbij " +"gebruikers of beheerders de naam, beschrijving en hiërarchie van categorieën" +" kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit " "kunnen toekennen." #: engine/core/models.py:274 @@ -1801,7 +1799,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Vertegenwoordigt een merkobject in het systeem. Deze klasse behandelt " "informatie en attributen met betrekking tot een merk, inclusief de naam, " @@ -1851,8 +1850,8 @@ msgstr "Categorieën" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -2005,13 +2004,13 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"Vertegenwoordigt een attribuut in het systeem. Deze klasse wordt gebruikt om " -"attributen te definiëren en te beheren. Dit zijn aanpasbare stukjes data die " -"kunnen worden geassocieerd met andere entiteiten. Attributen hebben " +"Vertegenwoordigt een attribuut in het systeem. Deze klasse wordt gebruikt om" +" attributen te definiëren en te beheren. Dit zijn aanpasbare stukjes data " +"die kunnen worden geassocieerd met andere entiteiten. Attributen hebben " "geassocieerde categorieën, groepen, waardetypes en namen. Het model " "ondersteunt meerdere typen waarden, waaronder string, integer, float, " "boolean, array en object. Dit maakt dynamische en flexibele " @@ -2078,12 +2077,12 @@ msgstr "Attribuut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"Vertegenwoordigt een specifieke waarde voor een kenmerk dat is gekoppeld aan " -"een product. Het koppelt het 'kenmerk' aan een unieke 'waarde', wat een " +"Vertegenwoordigt een specifieke waarde voor een kenmerk dat is gekoppeld aan" +" een product. Het koppelt het 'kenmerk' aan een unieke 'waarde', wat een " "betere organisatie en dynamische weergave van productkenmerken mogelijk " "maakt." @@ -2102,8 +2101,8 @@ msgstr "De specifieke waarde voor dit kenmerk" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2152,8 +2151,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Vertegenwoordigt een promotiecampagne voor producten met een korting. Deze " "klasse wordt gebruikt om promotiecampagnes te definiëren en beheren die een " @@ -2230,8 +2229,8 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Vertegenwoordigt een documentair record gekoppeld aan een product. Deze " "klasse wordt gebruikt om informatie op te slaan over documentaires met " @@ -2255,20 +2254,20 @@ msgstr "Onopgelost" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Vertegenwoordigt een adresentiteit met locatiegegevens en associaties met " "een gebruiker. Biedt functionaliteit voor het opslaan van geografische en " "adresgegevens, evenals integratie met geocoderingsservices. Deze klasse is " -"ontworpen om gedetailleerde adresgegevens op te slaan, inclusief componenten " -"als straat, stad, regio, land en geolocatie (lengtegraad en breedtegraad). " +"ontworpen om gedetailleerde adresgegevens op te slaan, inclusief componenten" +" als straat, stad, regio, land en geolocatie (lengtegraad en breedtegraad). " "Het ondersteunt integratie met geocodering API's, waardoor de opslag van " "ruwe API antwoorden voor verdere verwerking of inspectie mogelijk wordt. De " "klasse maakt het ook mogelijk om een adres met een gebruiker te associëren, " @@ -2390,7 +2389,8 @@ msgstr "Begin geldigheidsduur" #: engine/core/models.py:1120 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -"Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet gebruikt" +"Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet " +"gebruikt" #: engine/core/models.py:1121 msgid "usage timestamp" @@ -2417,8 +2417,8 @@ msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -"Er moet slechts één type korting worden gedefinieerd (bedrag of percentage), " -"maar niet beide of geen van beide." +"Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," +" maar niet beide of geen van beide." #: engine/core/models.py:1171 msgid "promocode already used" @@ -2433,8 +2433,8 @@ msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2535,8 +2535,8 @@ msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn" #: engine/core/models.py:1428 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." +"U kunt geen producten verwijderen uit een bestelling die niet in behandeling" +" is." #: engine/core/models.py:1416 #, python-brace-format @@ -2571,8 +2571,8 @@ msgstr "Je kunt geen lege bestelling kopen!" #: engine/core/models.py:1522 msgid "you cannot buy an order without a user" msgstr "" -"U kunt geen producten verwijderen uit een bestelling die niet in behandeling " -"is." +"U kunt geen producten verwijderen uit een bestelling die niet in behandeling" +" is." #: engine/core/models.py:1536 msgid "a user without a balance cannot buy with balance" @@ -2595,7 +2595,8 @@ msgstr "" msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -"Ongeldige betalingsmethode: {payment_method} van {available_payment_methods}!" +"Ongeldige betalingsmethode: {payment_method} van " +"{available_payment_methods}!" #: engine/core/models.py:1699 msgid "" @@ -2606,8 +2607,8 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" "Beheert gebruikersfeedback voor producten. Deze klasse is ontworpen om " -"feedback van gebruikers over specifieke producten die ze hebben gekocht vast " -"te leggen en op te slaan. De klasse bevat attributen voor het opslaan van " +"feedback van gebruikers over specifieke producten die ze hebben gekocht vast" +" te leggen en op te slaan. De klasse bevat attributen voor het opslaan van " "opmerkingen van gebruikers, een verwijzing naar het betreffende product in " "de bestelling en een door de gebruiker toegekende beoordeling. De klasse " "gebruikt databasevelden om feedbackgegevens effectief te modelleren en te " @@ -2622,7 +2623,8 @@ msgid "feedback comments" msgstr "Reacties" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" @@ -2659,8 +2661,8 @@ msgstr "" "het producttegoed of het toevoegen van feedback. Dit model biedt ook " "methoden en eigenschappen die bedrijfslogica ondersteunen, zoals het " "berekenen van de totaalprijs of het genereren van een download-URL voor " -"digitale producten. Het model integreert met de modellen Order en Product en " -"slaat een verwijzing ernaar op." +"digitale producten. Het model integreert met de modellen Order en Product en" +" slaat een verwijzing ernaar op." #: engine/core/models.py:1757 msgid "the price paid by the customer for this product at purchase time" @@ -2730,8 +2732,8 @@ msgstr "Verkeerde actie opgegeven voor feedback: {action}!" #: engine/core/models.py:1888 msgid "you cannot feedback an order which is not received" msgstr "" -"U kunt geen producten verwijderen uit een bestelling die niet in behandeling " -"is." +"U kunt geen producten verwijderen uit een bestelling die niet in behandeling" +" is." #: engine/core/models.py:1894 msgid "name" @@ -2770,9 +2772,9 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Vertegenwoordigt de downloadfunctionaliteit voor digitale activa gekoppeld " "aan bestellingen. De DigitalAssetDownload klasse biedt de mogelijkheid om " @@ -2838,8 +2840,7 @@ msgstr "Hallo %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Hartelijk dank voor uw bestelling #%(order.pk)s! We zijn blij om u te " @@ -2954,8 +2955,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Bedankt voor uw bestelling! We zijn blij om uw aankoop te bevestigen. " @@ -2992,27 +2992,28 @@ msgstr "Zowel gegevens als time-out zijn vereist" #: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" +msgstr "" +"Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | neem contact met ons op" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | neem contact met ons op" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Orderbevestiging" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | orderbevestiging" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Bestelling afgeleverd" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | bestelling geleverd" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode toegekend" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode toegekend" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3062,8 +3063,8 @@ msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -"Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met " -"een opgegeven sleutel en time-out." +"Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met" +" een opgegeven sleutel en time-out." #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -3074,8 +3075,8 @@ msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -"Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende " -"POST-verzoeken." +"Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende" +" POST-verzoeken." #: engine/core/views.py:262 msgid "Handles global search queries." @@ -3088,16 +3089,10 @@ msgstr "Behandelt de logica van kopen als bedrijf zonder registratie." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" -"Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een " -"bestelling.\n" -"Deze functie probeert het digitale activabestand te serveren dat zich in de " -"opslagmap van het project bevindt. Als het bestand niet wordt gevonden, " -"wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet " -"beschikbaar is." +"Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een bestelling.\n" +"Deze functie probeert het digitale activabestand te serveren dat zich in de opslagmap van het project bevindt. Als het bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3128,20 +3123,15 @@ msgstr "favicon niet gevonden" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Handelt verzoeken af voor de favicon van een website.\n" -"Deze functie probeert het favicon-bestand te serveren dat zich in de " -"statische map van het project bevindt. Als het favicon-bestand niet wordt " -"gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron " -"niet beschikbaar is." +"Deze functie probeert het favicon-bestand te serveren dat zich in de statische map van het project bevindt. Als het favicon-bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Stuurt het verzoek door naar de admin-indexpagina. De functie handelt " @@ -3153,7 +3143,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Geeft als resultaat de huidige versie van eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3161,18 +3151,19 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"Definieert een viewset voor het beheren van Evibes-gerelateerde handelingen. " -"De klasse EvibesViewSet erft van ModelViewSet en biedt functionaliteit voor " -"het afhandelen van acties en bewerkingen op Evibes-entiteiten. Het omvat " +"Definieert een viewset voor het beheren van Evibes-gerelateerde handelingen." +" De klasse EvibesViewSet erft van ModelViewSet en biedt functionaliteit voor" +" het afhandelen van acties en bewerkingen op Evibes-entiteiten. Het omvat " "ondersteuning voor dynamische serializer klassen op basis van de huidige " "actie, aanpasbare machtigingen, en rendering formaten." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Vertegenwoordigt een viewset voor het beheren van AttributeGroup objecten. " "Verwerkt bewerkingen met betrekking tot AttributeGroup, inclusief filteren, " @@ -3180,7 +3171,7 @@ msgstr "" "laag van de applicatie en biedt een gestandaardiseerde manier om verzoeken " "en reacties voor AttributeGroup-gegevens te verwerken." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3193,24 +3184,25 @@ msgstr "" "applicatie. Biedt een set API-eindpunten voor interactie met " "Attribuutgegevens. Deze klasse beheert het opvragen, filteren en seriëren " "van Attribuutobjecten, waardoor dynamische controle over de geretourneerde " -"gegevens mogelijk is, zoals filteren op specifieke velden of het ophalen van " -"gedetailleerde versus vereenvoudigde informatie afhankelijk van het verzoek." +"gegevens mogelijk is, zoals filteren op specifieke velden of het ophalen van" +" gedetailleerde versus vereenvoudigde informatie afhankelijk van het " +"verzoek." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"Een viewset voor het beheren van AttributeValue-objecten. Deze viewset biedt " -"functionaliteit voor het opsommen, ophalen, maken, bijwerken en verwijderen " -"van AttributeValue objecten. Het integreert met Django REST Framework's " +"Een viewset voor het beheren van AttributeValue-objecten. Deze viewset biedt" +" functionaliteit voor het opsommen, ophalen, maken, bijwerken en verwijderen" +" van AttributeValue objecten. Het integreert met Django REST Framework's " "viewset mechanismen en gebruikt passende serializers voor verschillende " "acties. Filtermogelijkheden worden geleverd door de DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3222,10 +3214,10 @@ msgstr "" "CategoryViewSet is verantwoordelijk voor het afhandelen van bewerkingen met " "betrekking tot het categoriemodel in het systeem. Het ondersteunt het " "ophalen, filteren en seriëren van categoriegegevens. De viewset dwingt ook " -"rechten af om ervoor te zorgen dat alleen bevoegde gebruikers toegang hebben " -"tot specifieke gegevens." +"rechten af om ervoor te zorgen dat alleen bevoegde gebruikers toegang hebben" +" tot specifieke gegevens." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3237,7 +3229,7 @@ msgstr "" "Merk objecten. Het gebruikt Django's ViewSet framework om de implementatie " "van API endpoints voor Merk objecten te vereenvoudigen." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3256,7 +3248,7 @@ msgstr "" "machtigingen en het verkrijgen van toegang tot gerelateerde feedback over " "een product." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3267,17 +3259,17 @@ msgstr "" "Vertegenwoordigt een viewset voor het beheren van Vendor-objecten. Met deze " "viewset kunnen gegevens van een verkoper worden opgehaald, gefilterd en " "geserialiseerd. Het definieert de queryset, filter configuraties, en " -"serializer klassen gebruikt om verschillende acties af te handelen. Het doel " -"van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-" +"serializer klassen gebruikt om verschillende acties af te handelen. Het doel" +" van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-" "gerelateerde bronnen via het Django REST framework." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Weergave van een weergaveset die Feedback-objecten afhandelt. Deze klasse " @@ -3288,14 +3280,14 @@ msgstr "" "implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van " "Django's filtersysteem voor het opvragen van gegevens." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet voor het beheren van orders en gerelateerde operaties. Deze klasse " @@ -3308,49 +3300,49 @@ msgstr "" "gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " "dienovereenkomstig permissies af tijdens de interactie met ordergegevens." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" -"Biedt een viewset voor het beheren van OrderProduct-entiteiten. Deze viewset " -"maakt CRUD-bewerkingen en aangepaste acties mogelijk die specifiek zijn voor " -"het OrderProduct-model. Het omvat filteren, toestemmingscontroles en " -"serializer-omschakeling op basis van de gevraagde actie. Bovendien biedt het " -"een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " +"Biedt een viewset voor het beheren van OrderProduct-entiteiten. Deze viewset" +" maakt CRUD-bewerkingen en aangepaste acties mogelijk die specifiek zijn " +"voor het OrderProduct-model. Het omvat filteren, toestemmingscontroles en " +"serializer-omschakeling op basis van de gevraagde actie. Bovendien biedt het" +" een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " "instanties" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" "Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -"Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende " -"API-acties." +"Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende" +" API-acties." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Vertegenwoordigt een view set voor het beheren van promoties." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "" "Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3364,7 +3356,7 @@ msgstr "" "verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " "verleend." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3372,18 +3364,18 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"Deze klasse biedt viewsetfunctionaliteit voor het beheren van `Adres`-" -"objecten. De klasse AddressViewSet maakt CRUD-bewerkingen, filteren en " -"aangepaste acties met betrekking tot adresentiteiten mogelijk. Het bevat " +"Deze klasse biedt viewsetfunctionaliteit voor het beheren van " +"`Adres`-objecten. De klasse AddressViewSet maakt CRUD-bewerkingen, filteren " +"en aangepaste acties met betrekking tot adresentiteiten mogelijk. Het bevat " "gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " "omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3392,8 +3384,8 @@ msgid "" "serializers based on the action being performed." msgstr "" "Behandelt bewerkingen met betrekking tot Product Tags binnen de applicatie. " -"Deze klasse biedt functionaliteit voor het ophalen, filteren en serialiseren " -"van Product Tag objecten. Het ondersteunt flexibel filteren op specifieke " +"Deze klasse biedt functionaliteit voor het ophalen, filteren en serialiseren" +" van Product Tag objecten. Het ondersteunt flexibel filteren op specifieke " "attributen met behulp van de gespecificeerde filter backend en gebruikt " "dynamisch verschillende serializers op basis van de actie die wordt " "uitgevoerd." diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.mo b/engine/core/locale/no_NO/LC_MESSAGES/django.mo index f40af0d37961604e58c45a18fc9f62cedaa7110f..980ea23003e3ab2986a8317e56ab54e7ec8bd62a 100644 GIT binary patch delta 5543 zcmaLac~sS99>?+L2chDEA_%0WfCyexk|o@zP;mo7QBzY>Q?81b7*LZZ>)L2$R;JSA zgbA}a*-&XS&as>_Ohp^D#WX95H1njDI%BzIS@ZtzJX3SdoHP9Mdbay4-)Fg(nyn$5 zw}!m*Lqs6i7&EZWnCoyBrr=WSgkYD$PF?W*x8#W^!zss1` z=);zniE1|pqj3_3Vi{hGi*}iS2`2Fr1+og4U^S|P_}#{|$KI%pvhhW{4OQQ~-k4U{ z9`9fxT~G^HyoW(?GsfdN+#6&}Co6>iUNg$tj(3m0QC%xQ0aELw3L{>`s0RYM^_u1+K=HSmnz9gdyZ#clq6zL%tC|VW9ZKM2Y-Q?;Ep` z{B1{!nTp-9}fTw9U3*lxenhtFZ_NConOvl!(J##%~qqb}TYO5Eb4tXsGbl8rP$i$E~cE(w#GcX6W z^0gR`$DJWzUemkK1N&1x28ZHfsCMr;FJK<|n6_Ti87ac%DV+j*uC*W!5m5*3+jHdZUm$4JYZYMpu3Y^}%Z*?0_9GjC?ApJR8HY5L@C*)RxZ2Yw>Z^L^q-) zv@1YD56oHAp^A&Np`U=7&@$AasX}el?@<%mi|X(oYNcPha?`=)TcRe=6*a+RjKlse zKN;0eV6ID4phEWm_Qn;cfnPy&REO(Y5s1MyXsBEXEB$BvX=LWR72jBVG;IS3WX@#w?psI6Rq+Oi#} z_uvcE!xVO{XR4dr#Ism~-MiQ`RF8`IfiB#C?bWBQBC@O3^uwVOj->o{?28*wGe3&D z9j8zejf!J}BDPJadJ2gq{N)&>rc(3iwzRH%C- z*f)P5=8#{8TKRs|o*zc7>^Szr%b1R--Myw?K7Q0$dJ|RuF6vzfO|)ASiJDLb#_Im( zkWh&IsMES0``}jRNz_bZl01`$Ihc$ksEI%2@_SJIoI`DquZML4Dl!kb{AQPL#6;cy z=04jn1vStV)QXm)9-7xshvf~t4iBLsat^iESFjMHlI=?8pz6y}hjS6CpT|*qzXo-9 zU&PM3|MjlmI4X2kTt29$-Q$j^P{yH7^CY|jSECN^x0s5)Ubfw2RLGx1O}qv*k-xb7 zPSh40#(=(^PLSw$`>AMuD(z!0t^31-e%KQClzsbsO?f5txcP{UxYFx)5988dqM8TG0!r z_S;?gK2!ugMD>3f^^eCzRR0lyG&_?-ROoV09hIRvT7nAoD%1p?$8NX{^{_Oe1~`ve zS&MZ0BuAho8jl)iAZh{yn1&NkFJ$0R5=kUBxr!sGkcDR0iKXEj@}p7LZyT!q80rBE zy}?en9qQJ^p$;7X^h6_UHvZ9 zHGIp}A47e2d=ns{P>1E(JspkJZa>sesGOvYd?`Q@k&9Kuu#A7u~Y5Y!%)Vr#5J zMdAP|5{EDr8&UoKhzZzzw0*#GQ4iWgNbag*Jp?sKb?r+ViET zm2F4;(m98Ez!JyUUrGh23C%>^j=89pa|0@Je?@K8`k5rOu|-J zg!*z?fD!lv>J9%RYEO5dIzEJ2=|xP#PUGyr1*nH;3hFw)ie2#}7U=#rzts*j9@XIt z)E?fA3RN{K)Z0)U??J8XJIurM@%C&4P`?Luq6WH*eKBEzZ8rtSk$(Ix>FDdY!u2M#i8I?P9$hc_*gKimmf9#^z(z2p5 z{|tXgnSWM=e_px&mk$4@=?s5)Me)3OOfPnxpV2G+Pum4$rFWK=lot78XBSsgn12K4 C67Sjo delta 5450 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 diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.po b/engine/core/locale/no_NO/LC_MESSAGES/django.po index 3b5b029b..4196d84f 100644 --- a/engine/core/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/core/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -28,7 +28,8 @@ msgstr "Er aktiv" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Hvis dette objektet er satt til false, kan det ikke ses av brukere uten " "nødvendig tillatelse" @@ -49,89 +50,89 @@ msgstr "Modifisert" msgid "when the object was last modified" msgstr "Når objektet sist ble redigert" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Oversettelser" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Generelt" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relasjoner" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "ytterligere informasjon" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Tidsstempler" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktiver valgt %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Utvalgte elementer har blitt aktivert!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgt %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Utvalgte elementer har blitt deaktivert!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Attributtverdi" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Attributtverdier" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Bilde" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Bilder" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Lager" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Aksjer" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Bestill produkt" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Bestill produkter" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Barn" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfigurer" @@ -155,7 +156,8 @@ msgstr "Leveres" msgid "canceled" msgstr "Avlyst" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Mislyktes" @@ -193,10 +195,10 @@ msgid "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." msgstr "" -"OpenApi3-skjema for dette API-et. Format kan velges via innholdsforhandling. " -"Språk kan velges både med Accept-Language og spørringsparameteren." +"OpenApi3-skjema for dette API-et. Format kan velges via innholdsforhandling." +" Språk kan velges både med Accept-Language og spørringsparameteren." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -206,8 +208,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Bruk bare en nøkkel for å lese tillatte data fra hurtigbufferen.\n" -"Bruk nøkkel, data og tidsavbrudd med autentisering for å skrive data til " -"hurtigbufferen." +"Bruk nøkkel, data og tidsavbrudd med autentisering for å skrive data til hurtigbufferen." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -221,7 +222,7 @@ msgstr "Hent applikasjonens eksponerbare parametere" msgid "send a message to the support team" msgstr "Send en melding til supportteamet" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Be om en CORSed URL. Bare https er tillatt." @@ -272,7 +273,8 @@ msgstr "" "attributter" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende attributtgruppe for å lagre ikke-" "redigerbare felt" @@ -327,7 +329,8 @@ msgstr "" "attributter" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende attributtverdi og lagre ikke-" "redigerbare felt" @@ -364,9 +367,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta-øyeblikksbilde" @@ -384,8 +387,8 @@ msgstr "For ikke-ansatte brukere returneres bare deres egne bestillinger." #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Søk etter store og små bokstaver på tvers av human_readable_id, " "order_products.product.name og order_products.product.partnumber" @@ -420,13 +423,13 @@ msgstr "Filtrer etter ordrestatus (skiller mellom store og små bokstaver)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Bestill etter en av: uuid, human_readable_id, user_email, user, status, " -"created, modified, buy_time, random. Prefiks med '-' for synkende rekkefølge " -"(f.eks. '-buy_time')." +"created, modified, buy_time, random. Prefiks med '-' for synkende rekkefølge" +" (f.eks. '-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -480,7 +483,7 @@ msgstr "hente en brukers nåværende ventende ordre" msgid "retrieves a current pending order of an authenticated user" msgstr "henter en gjeldende ventende ordre fra en autentisert bruker" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "kjøpe en ordre uten å opprette konto" @@ -497,8 +500,8 @@ msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -"Legger til et produkt i en bestilling ved hjelp av de angitte `product_uuid` " -"og `attributtene`." +"Legger til et produkt i en bestilling ved hjelp av de angitte `product_uuid`" +" og `attributtene`." #: engine/core/docs/drf/viewsets.py:429 msgid "add a list of products to order, quantities will not count" @@ -598,7 +601,8 @@ msgstr "Fjern et produkt fra ønskelisten" #: engine/core/docs/drf/viewsets.py:524 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" -"Fjerner et produkt fra en ønskeliste ved hjelp av den angitte `product_uuid`." +"Fjerner et produkt fra en ønskeliste ved hjelp av den angitte " +"`product_uuid`." #: engine/core/docs/drf/viewsets.py:532 msgid "add many products to wishlist" @@ -625,28 +629,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrer etter ett eller flere attributtnavn/verdipar. \n" "- **Syntaks**: `attr_name=metode-verdi[;attr2=metode2-verdi2]...`.\n" -"- **Metoder** (standardinnstilling er `icontains` hvis utelatt): `iexact`, " -"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, " -"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" -"- **Vertyping av verdi**: JSON forsøkes først (slik at du kan sende lister/" -"dikter), `true`/`false` for booleans, heltall, floats; ellers behandlet som " -"streng. \n" -"- **Base64**: prefiks med `b64-` for URL-sikker base64-koding av " -"råverdien. \n" +"- **Metoder** (standardinnstilling er `icontains` hvis utelatt): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" +"- **Vertyping av verdi**: JSON forsøkes først (slik at du kan sende lister/dikter), `true`/`false` for booleans, heltall, floats; ellers behandlet som streng. \n" +"- **Base64**: prefiks med `b64-` for URL-sikker base64-koding av råverdien. \n" "Eksempler: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-beskrivelse=icontains-aGVhdC1jb2xk`" @@ -661,12 +655,10 @@ msgstr "(nøyaktig) Produkt UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Kommaseparert liste over felt som skal sorteres etter. Prefiks med `-` for " -"synkende sortering. \n" +"Kommaseparert liste over felt som skal sorteres etter. Prefiks med `-` for synkende sortering. \n" "**Tillatt:** uuid, vurdering, navn, slug, opprettet, endret, pris, tilfeldig" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -680,6 +672,9 @@ msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Opprett et produkt" @@ -1118,249 +1113,251 @@ msgstr "Nivå" msgid "Product UUID" msgstr "Produkt UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Nøkkel å lete etter i eller legge inn i hurtigbufferen" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data som skal lagres i hurtigbufferen" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Tidsavbrudd i sekunder for å legge inn data i hurtigbufferen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Bufret data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-data fra den forespurte URL-en" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Bare nettadresser som begynner med http(s):// er tillatt" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Legg til et produkt i bestillingen" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke funnet!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Fjern alle produktene fra bestillingen" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Kjøp en ordre" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Utfør en handling på en liste over produkter i bestillingen" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Fjern/legg til" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Handlingen må enten være \"legg til\" eller \"fjern\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Utføre en handling på en liste over produkter i ønskelisten" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Vennligst oppgi verdien `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke funnet!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Legg til et produkt i bestillingen" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Kjøp en ordre" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Send attributtene som en streng formatert som attr1=verdi1,attr2=verdi2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Legg til eller slett en tilbakemelding for ordreproduktet" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Handlingen må være enten `add` eller `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestill produkt {order_product_uuid} ikke funnet!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Opprinnelig adressestreng oppgitt av brukeren" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Grensen må være mellom 1 og 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en drøm" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Egenskaper" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grupperte attributter" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupper av attributter" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Merkevarer" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Påslag i prosent" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -"Hvilke attributter og verdier som kan brukes til å filtrere denne kategorien." +"Hvilke attributter og verdier som kan brukes til å filtrere denne " +"kategorien." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Minimums- og maksimumspriser for produkter i denne kategorien, hvis " "tilgjengelig." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tagger for denne kategorien" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkter i denne kategorien" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Leverandører" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breddegrad (Y-koordinat)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Lengdegrad (X-koordinat)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Hvordan" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Vurderingsverdi fra 1 til og med 10, eller 0 hvis den ikke er angitt." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representerer tilbakemeldinger fra en bruker." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Varsler" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Last ned url for dette bestillingsproduktet, hvis aktuelt" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Tilbakemeldinger" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne rekkefølgen" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Faktureringsadresse" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1368,53 +1365,53 @@ msgstr "" "Leveringsadresse for denne bestillingen, la den stå tom hvis den er den " "samme som faktureringsadressen eller hvis den ikke er relevant" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Totalpris for denne bestillingen" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Totalt antall produkter i bestillingen" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Er alle produktene i bestillingen digitale" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transaksjoner for denne bestillingen" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Bestillinger" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Bilde-URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Bilder av produktet" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Tilbakemeldinger" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Merkevare" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attributtgrupper" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1422,7 +1419,7 @@ msgstr "Attributtgrupper" msgid "price" msgstr "Pris" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1430,39 +1427,39 @@ msgstr "Pris" msgid "quantity" msgstr "Antall" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Antall tilbakemeldinger" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkter kun tilgjengelig for personlige bestillinger" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Rabattert pris" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produkter" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promokoder" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkter på salg" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Kampanjer" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Leverandør" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1470,99 +1467,98 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Ønskelister" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Merkede produkter" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Produktmerker" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Merkede kategorier" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategorier' tagger" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Prosjektets navn" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Selskapets navn" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Selskapets adresse" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Telefonnummer til selskapet" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" -msgstr "" -"\"e-post fra\", noen ganger må den brukes i stedet for vertsbrukerverdien" +msgstr "\"e-post fra\", noen ganger må den brukes i stedet for vertsbrukerverdien" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "E-post vert bruker" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Maksimalt beløp for betaling" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Minimumsbeløp for betaling" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analysedata" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Annonsedata" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfigurasjon" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Språkkode" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Navn på språk" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Språkflagg, hvis det finnes :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Få en liste over språk som støttes" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Søkeresultater for produkter" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Søkeresultater for produkter" @@ -1573,11 +1569,11 @@ msgid "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." msgstr "" -"Representerer en gruppe attributter, som kan være hierarkiske. Denne klassen " -"brukes til å administrere og organisere attributtgrupper. En attributtgruppe " -"kan ha en overordnet gruppe som danner en hierarkisk struktur. Dette kan " -"være nyttig for å kategorisere og administrere attributter på en mer " -"effektiv måte i et komplekst system." +"Representerer en gruppe attributter, som kan være hierarkiske. Denne klassen" +" brukes til å administrere og organisere attributtgrupper. En " +"attributtgruppe kan ha en overordnet gruppe som danner en hierarkisk " +"struktur. Dette kan være nyttig for å kategorisere og administrere " +"attributter på en mer effektiv måte i et komplekst system." #: engine/core/models.py:91 msgid "parent of this group" @@ -1606,8 +1602,8 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" "Representerer en leverandørenhet som kan lagre informasjon om eksterne " -"leverandører og deres interaksjonskrav. Vendor-klassen brukes til å definere " -"og administrere informasjon knyttet til en ekstern leverandør. Den lagrer " +"leverandører og deres interaksjonskrav. Vendor-klassen brukes til å definere" +" og administrere informasjon knyttet til en ekstern leverandør. Den lagrer " "leverandørens navn, autentiseringsdetaljer som kreves for kommunikasjon, og " "prosentmarkeringen som brukes på produkter som hentes fra leverandøren. " "Denne modellen inneholder også ytterligere metadata og begrensninger, noe " @@ -1665,8 +1661,8 @@ msgid "" "metadata customization for administrative purposes." msgstr "" "Representerer en produkttagg som brukes til å klassifisere eller " -"identifisere produkter. ProductTag-klassen er utformet for å identifisere og " -"klassifisere produkter på en unik måte ved hjelp av en kombinasjon av en " +"identifisere produkter. ProductTag-klassen er utformet for å identifisere og" +" klassifisere produkter på en unik måte ved hjelp av en kombinasjon av en " "intern tagg-identifikator og et brukervennlig visningsnavn. Den støtter " "operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for " "administrative formål." @@ -1699,8 +1695,8 @@ msgid "" msgstr "" "Representerer en kategorikode som brukes for produkter. Denne klassen " "modellerer en kategorikode som kan brukes til å knytte til og klassifisere " -"produkter. Den inneholder attributter for en intern tagg-identifikator og et " -"brukervennlig visningsnavn." +"produkter. Den inneholder attributter for en intern tagg-identifikator og et" +" brukervennlig visningsnavn." #: engine/core/models.py:254 msgid "category tag" @@ -1723,8 +1719,8 @@ msgid "" "priority." msgstr "" "Representerer en kategorienhet for å organisere og gruppere relaterte " -"elementer i en hierarkisk struktur. Kategorier kan ha hierarkiske relasjoner " -"med andre kategorier, noe som støtter foreldre-barn-relasjoner. Klassen " +"elementer i en hierarkisk struktur. Kategorier kan ha hierarkiske relasjoner" +" med andre kategorier, noe som støtter foreldre-barn-relasjoner. Klassen " "inneholder felt for metadata og visuell representasjon, som danner " "grunnlaget for kategorirelaterte funksjoner. Denne klassen brukes vanligvis " "til å definere og administrere produktkategorier eller andre lignende " @@ -1781,7 +1777,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Representerer et merkevareobjekt i systemet. Denne klassen håndterer " "informasjon og attributter knyttet til et merke, inkludert navn, logoer, " @@ -1831,16 +1828,16 @@ msgstr "Kategorier" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" -"Representerer lagerbeholdningen til et produkt som administreres i systemet. " -"Denne klassen gir informasjon om forholdet mellom leverandører, produkter og " -"deres lagerinformasjon, samt lagerrelaterte egenskaper som pris, " +"Representerer lagerbeholdningen til et produkt som administreres i systemet." +" Denne klassen gir informasjon om forholdet mellom leverandører, produkter " +"og deres lagerinformasjon, samt lagerrelaterte egenskaper som pris, " "innkjøpspris, antall, SKU og digitale eiendeler. Den er en del av " "lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter " "som er tilgjengelige fra ulike leverandører." @@ -1984,8 +1981,8 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Representerer et attributt i systemet. Denne klassen brukes til å definere " @@ -2046,7 +2043,8 @@ msgstr "er filtrerbar" #: engine/core/models.py:759 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -"Hvilke attributter og verdier som kan brukes til å filtrere denne kategorien." +"Hvilke attributter og verdier som kan brukes til å filtrere denne " +"kategorien." #: engine/core/models.py:771 engine/core/models.py:789 #: engine/core/templates/digital_order_delivered_email.html:134 @@ -2055,9 +2053,9 @@ msgstr "Attributt" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Representerer en spesifikk verdi for et attributt som er knyttet til et " "produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir " @@ -2078,14 +2076,14 @@ msgstr "Den spesifikke verdien for dette attributtet" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Representerer et produktbilde som er knyttet til et produkt i systemet. " -"Denne klassen er utviklet for å administrere bilder for produkter, inkludert " -"funksjonalitet for å laste opp bildefiler, knytte dem til spesifikke " +"Denne klassen er utviklet for å administrere bilder for produkter, inkludert" +" funksjonalitet for å laste opp bildefiler, knytte dem til spesifikke " "produkter og bestemme visningsrekkefølgen. Den inneholder også en " "tilgjengelighetsfunksjon med alternativ tekst for bildene." @@ -2127,11 +2125,11 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"Representerer en kampanje for produkter med rabatt. Denne klassen brukes til " -"å definere og administrere kampanjekampanjer som tilbyr en prosentbasert " +"Representerer en kampanje for produkter med rabatt. Denne klassen brukes til" +" å definere og administrere kampanjekampanjer som tilbyr en prosentbasert " "rabatt for produkter. Klassen inneholder attributter for å angi " "rabattsatsen, gi detaljer om kampanjen og knytte den til de aktuelle " "produktene. Den integreres med produktkatalogen for å finne de berørte " @@ -2176,8 +2174,8 @@ msgid "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." msgstr "" -"Representerer en brukers ønskeliste for lagring og administrasjon av ønskede " -"produkter. Klassen tilbyr funksjonalitet for å administrere en samling " +"Representerer en brukers ønskeliste for lagring og administrasjon av ønskede" +" produkter. Klassen tilbyr funksjonalitet for å administrere en samling " "produkter, og støtter operasjoner som å legge til og fjerne produkter, samt " "operasjoner for å legge til og fjerne flere produkter samtidig." @@ -2203,11 +2201,11 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"Representerer en dokumentarpost knyttet til et produkt. Denne klassen brukes " -"til å lagre informasjon om dokumentarer knyttet til bestemte produkter, " +"Representerer en dokumentarpost knyttet til et produkt. Denne klassen brukes" +" til å lagre informasjon om dokumentarer knyttet til bestemte produkter, " "inkludert filopplastinger og metadata for disse. Den inneholder metoder og " "egenskaper for å håndtere filtype og lagringsbane for dokumentarfilene. Den " "utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede " @@ -2227,23 +2225,23 @@ msgstr "Uavklart" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Representerer en adresseenhet som inneholder stedsdetaljer og assosiasjoner " "til en bruker. Tilbyr funksjonalitet for lagring av geografiske data og " "adressedata, samt integrering med geokodingstjenester. Denne klassen er " -"utformet for å lagre detaljert adresseinformasjon, inkludert komponenter som " -"gate, by, region, land og geolokalisering (lengde- og breddegrad). Den " +"utformet for å lagre detaljert adresseinformasjon, inkludert komponenter som" +" gate, by, region, land og geolokalisering (lengde- og breddegrad). Den " "støtter integrasjon med API-er for geokoding, og gjør det mulig å lagre rå " -"API-svar for videre behandling eller inspeksjon. Klassen gjør det også mulig " -"å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " +"API-svar for videre behandling eller inspeksjon. Klassen gjør det også mulig" +" å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " "datahåndteringen." #: engine/core/models.py:1029 @@ -2309,11 +2307,11 @@ msgid "" msgstr "" "Representerer en kampanjekode som kan brukes til rabatter, og styrer dens " "gyldighet, rabattype og anvendelse. PromoCode-klassen lagrer informasjon om " -"en kampanjekode, inkludert dens unike identifikator, rabattegenskaper (beløp " -"eller prosent), gyldighetsperiode, tilknyttet bruker (hvis noen) og status " +"en kampanjekode, inkludert dens unike identifikator, rabattegenskaper (beløp" +" eller prosent), gyldighetsperiode, tilknyttet bruker (hvis noen) og status " "for bruken av den. Den inneholder funksjonalitet for å validere og bruke " -"kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er " -"oppfylt." +"kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er" +" oppfylt." #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" @@ -2358,7 +2356,8 @@ msgstr "Start gyldighetstid" #: engine/core/models.py:1120 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -"Tidsstempel for når kampanjekoden ble brukt, tomt hvis den ikke er brukt ennå" +"Tidsstempel for når kampanjekoden ble brukt, tomt hvis den ikke er brukt " +"ennå" #: engine/core/models.py:1121 msgid "usage timestamp" @@ -2401,18 +2400,18 @@ msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "Representerer en bestilling som er lagt inn av en bruker. Denne klassen " "modellerer en bestilling i applikasjonen, inkludert ulike attributter som " -"fakturerings- og leveringsinformasjon, status, tilknyttet bruker, varsler og " -"relaterte operasjoner. Bestillinger kan ha tilknyttede produkter, kampanjer " -"kan brukes, adresser kan angis, og frakt- eller faktureringsopplysninger kan " -"oppdateres. På samme måte støtter funksjonaliteten håndtering av produktene " -"i bestillingens livssyklus." +"fakturerings- og leveringsinformasjon, status, tilknyttet bruker, varsler og" +" relaterte operasjoner. Bestillinger kan ha tilknyttede produkter, kampanjer" +" kan brukes, adresser kan angis, og frakt- eller faktureringsopplysninger " +"kan oppdateres. På samme måte støtter funksjonaliteten håndtering av " +"produktene i bestillingens livssyklus." #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2571,8 +2570,8 @@ msgid "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." msgstr "" -"Håndterer brukernes tilbakemeldinger på produkter. Denne klassen er utformet " -"for å fange opp og lagre tilbakemeldinger fra brukerne om spesifikke " +"Håndterer brukernes tilbakemeldinger på produkter. Denne klassen er utformet" +" for å fange opp og lagre tilbakemeldinger fra brukerne om spesifikke " "produkter de har kjøpt. Den inneholder attributter for å lagre " "brukerkommentarer, en referanse til det relaterte produktet i bestillingen " "og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere " @@ -2587,10 +2586,11 @@ msgid "feedback comments" msgstr "Tilbakemeldinger og kommentarer" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "" -"Refererer til det spesifikke produktet i en ordre som denne tilbakemeldingen " -"handler om" +"Refererer til det spesifikke produktet i en ordre som denne tilbakemeldingen" +" handler om" #: engine/core/models.py:1720 msgid "related order product" @@ -2734,12 +2734,12 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" -"Representerer nedlastingsfunksjonaliteten for digitale ressurser knyttet til " -"bestillinger. DigitalAssetDownload-klassen gir mulighet til å administrere " +"Representerer nedlastingsfunksjonaliteten for digitale ressurser knyttet til" +" bestillinger. DigitalAssetDownload-klassen gir mulighet til å administrere " "og få tilgang til nedlastinger knyttet til bestillingsprodukter. Den " "inneholder informasjon om det tilknyttede bestillingsproduktet, antall " "nedlastinger og om ressursen er offentlig synlig. Den inneholder en metode " @@ -2802,13 +2802,12 @@ msgstr "Hallo %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" -"Takk for din bestilling #%(order.pk)s! Vi er glade for å informere deg om at " -"vi har tatt bestillingen din i arbeid. Nedenfor er detaljene i bestillingen " -"din:" +"Takk for din bestilling #%(order.pk)s! Vi er glade for å informere deg om at" +" vi har tatt bestillingen din i arbeid. Nedenfor er detaljene i bestillingen" +" din:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2918,8 +2917,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Takk for bestillingen din! Vi er glade for å kunne bekrefte kjøpet ditt. " @@ -2960,23 +2958,23 @@ msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | kontakt oss initiert" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | kontakt oss initiert" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Ordrebekreftelse" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | ordrebekreftelse" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Bestilling levert" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | bestilling levert" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promokode gitt" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promokode gitt" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2997,8 +2995,8 @@ msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -"Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den " -"sørger for at svaret inneholder riktig innholdstypeoverskrift for XML." +"Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den" +" sørger for at svaret inneholder riktig innholdstypeoverskrift for XML." #: engine/core/views.py:88 msgid "" @@ -3037,8 +3035,8 @@ msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -"Håndterer forespørsler om behandling og validering av URL-er fra innkommende " -"POST-forespørsler." +"Håndterer forespørsler om behandling og validering av URL-er fra innkommende" +" POST-forespørsler." #: engine/core/views.py:262 msgid "Handles global search queries." @@ -3051,15 +3049,10 @@ msgstr "Håndterer logikken med å kjøpe som en bedrift uten registrering." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" -"Håndterer nedlastingen av en digital ressurs som er knyttet til en " -"bestilling.\n" -"Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i " -"lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP " -"404-feil for å indikere at ressursen ikke er tilgjengelig." +"Håndterer nedlastingen av en digital ressurs som er knyttet til en bestilling.\n" +"Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3088,19 +3081,15 @@ msgstr "favicon ble ikke funnet" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Håndterer forespørsler om faviconet til et nettsted.\n" -"Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske " -"katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP " -"404-feil for å indikere at ressursen ikke er tilgjengelig." +"Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Omdirigerer forespørselen til admin-indekssiden. Funksjonen håndterer " @@ -3112,7 +3101,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Returnerer gjeldende versjon av eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3126,12 +3115,13 @@ msgstr "" "støtte for dynamiske serialiseringsklasser basert på den aktuelle " "handlingen, tilpassbare tillatelser og gjengivelsesformater." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Representerer et visningssett for håndtering av AttributeGroup-objekter. " "Håndterer operasjoner knyttet til AttributeGroup, inkludert filtrering, " @@ -3139,7 +3129,7 @@ msgstr "" "API-lag og gir en standardisert måte å behandle forespørsler og svar for " "AttributeGroup-data på." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3148,20 +3138,20 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"Håndterer operasjoner knyttet til Attribute-objekter i applikasjonen. Tilbyr " -"et sett med API-endepunkter for interaksjon med attributtdata. Denne klassen " -"håndterer spørring, filtrering og serialisering av Attribute-objekter, noe " -"som gir dynamisk kontroll over dataene som returneres, for eksempel " -"filtrering etter bestemte felt eller henting av detaljert versus forenklet " -"informasjon avhengig av forespørselen." +"Håndterer operasjoner knyttet til Attribute-objekter i applikasjonen. Tilbyr" +" et sett med API-endepunkter for interaksjon med attributtdata. Denne " +"klassen håndterer spørring, filtrering og serialisering av Attribute-" +"objekter, noe som gir dynamisk kontroll over dataene som returneres, for " +"eksempel filtrering etter bestemte felt eller henting av detaljert versus " +"forenklet informasjon avhengig av forespørselen." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Et visningssett for administrasjon av AttributeValue-objekter. Dette " "visningssettet inneholder funksjonalitet for å liste opp, hente, opprette, " @@ -3169,7 +3159,7 @@ msgstr "" "Framework's viewset-mekanismer og bruker passende serialisatorer for ulike " "handlinger. Filtreringsmuligheter tilbys gjennom DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3183,7 +3173,7 @@ msgstr "" "kategoridata. Visningssettet håndhever også tillatelser for å sikre at bare " "autoriserte brukere har tilgang til bestemte data." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3195,7 +3185,7 @@ msgstr "" "Brand-objekter. Den bruker Djangos ViewSet-rammeverk for å forenkle " "implementeringen av API-sluttpunkter for Brand-objekter." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3210,10 +3200,10 @@ msgstr "" "filtrering, serialisering og operasjoner på spesifikke forekomster. Den " "utvides fra `EvibesViewSet` for å bruke felles funksjonalitet og integreres " "med Django REST-rammeverket for RESTful API-operasjoner. Inkluderer metoder " -"for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte " -"tilbakemeldinger om et produkt." +"for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte" +" tilbakemeldinger om et produkt." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3223,18 +3213,18 @@ msgid "" msgstr "" "Representerer et visningssett for håndtering av Vendor-objekter. Dette " "visningssettet gjør det mulig å hente, filtrere og serialisere Vendor-data. " -"Den definerer spørresettet, filterkonfigurasjonene og serialiseringsklassene " -"som brukes til å håndtere ulike handlinger. Formålet med denne klassen er å " -"gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django " +"Den definerer spørresettet, filterkonfigurasjonene og serialiseringsklassene" +" som brukes til å håndtere ulike handlinger. Formålet med denne klassen er å" +" gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django " "REST-rammeverket." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Representasjon av et visningssett som håndterer Feedback-objekter. Denne " @@ -3245,14 +3235,14 @@ msgstr "" "tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker " "Djangos filtreringssystem for å spørre etter data." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet for håndtering av bestillinger og relaterte operasjoner. Denne " @@ -3261,50 +3251,50 @@ msgstr "" "ordreoperasjoner, for eksempel å legge til eller fjerne produkter, utføre " "kjøp for både registrerte og uregistrerte brukere og hente den aktuelle " "autentiserte brukerens ventende bestillinger. ViewSet bruker flere " -"serialisatorer basert på den spesifikke handlingen som utføres, og håndhever " -"tillatelser i samsvar med dette under samhandling med ordredata." +"serialisatorer basert på den spesifikke handlingen som utføres, og håndhever" +" tillatelser i samsvar med dette under samhandling med ordredata." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Tilbyr et visningssett for håndtering av OrderProduct-enheter. Dette " -"visningssettet muliggjør CRUD-operasjoner og egendefinerte handlinger som er " -"spesifikke for OrderProduct-modellen. Det inkluderer filtrering, kontroll av " -"tillatelser og bytte av serializer basert på den forespurte handlingen. I " -"tillegg inneholder det en detaljert handling for håndtering av " +"visningssettet muliggjør CRUD-operasjoner og egendefinerte handlinger som er" +" spesifikke for OrderProduct-modellen. Det inkluderer filtrering, kontroll " +"av tillatelser og bytte av serializer basert på den forespurte handlingen. I" +" tillegg inneholder det en detaljert handling for håndtering av " "tilbakemeldinger på OrderProduct-instanser" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -"Administrerer henting og håndtering av PromoCode-instanser gjennom ulike API-" -"handlinger." +"Administrerer henting og håndtering av PromoCode-instanser gjennom ulike " +"API-handlinger." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Representerer et visningssett for håndtering av kampanjer." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3314,10 +3304,10 @@ msgstr "" "gjør det mulig å hente, endre og tilpasse produkter i ønskelisten. Dette " "ViewSetet legger til rette for funksjonalitet som å legge til, fjerne og " "utføre massehandlinger for ønskelisteprodukter. Tillatelseskontroller er " -"integrert for å sikre at brukere bare kan administrere sine egne ønskelister " -"med mindre eksplisitte tillatelser er gitt." +"integrert for å sikre at brukere bare kan administrere sine egne ønskelister" +" med mindre eksplisitte tillatelser er gitt." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3325,18 +3315,18 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"Denne klassen tilbyr visningssettfunksjonalitet for håndtering av `Address`-" -"objekter. AddressViewSet-klassen muliggjør CRUD-operasjoner, filtrering og " -"egendefinerte handlinger knyttet til adresseenheter. Den inkluderer " -"spesialisert atferd for ulike HTTP-metoder, overstyring av serializer og " -"håndtering av tillatelser basert på forespørselskonteksten." +"Denne klassen tilbyr visningssettfunksjonalitet for håndtering av " +"`Address`-objekter. AddressViewSet-klassen muliggjør CRUD-operasjoner, " +"filtrering og egendefinerte handlinger knyttet til adresseenheter. Den " +"inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av " +"serializer og håndtering av tillatelser basert på forespørselskonteksten." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Feil i geokoding: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.mo b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo index 0e8c9d425091bf810f2c7eb91540987aa1c5db05..d06ccd026c00a0f8f8ff34e1d0a08f0aed7a0ee7 100644 GIT binary patch delta 5493 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 Xk6-hD4=gK*%y*hU?!F`=---V(x}4)+ delta 5520 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 diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.po b/engine/core/locale/pl_PL/LC_MESSAGES/django.po index 9d0ce88b..5084d3d3 100644 --- a/engine/core/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/core/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Jest aktywny" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Jeśli ustawione na false, obiekt ten nie może być widoczny dla użytkowników " "bez wymaganych uprawnień." @@ -50,89 +51,89 @@ msgstr "Zmodyfikowany" msgid "when the object was last modified" msgstr "Kiedy obiekt był ostatnio edytowany" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Tłumaczenia" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Ogólne" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relacje" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "dodatkowe informacje" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadane" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Znaczniki czasu" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktywuj wybrane %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Wybrane elementy zostały aktywowane!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Dezaktywacja wybranego %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Wybrane elementy zostały dezaktywowane!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Wartość atrybutu" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Wartości atrybutów" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Obraz" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Obrazy" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stan magazynowy" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Akcje" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Zamów produkt" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Zamawianie produktów" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Dzieci" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfiguracja" @@ -156,7 +157,8 @@ msgstr "Dostarczone" msgid "canceled" msgstr "Anulowane" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Nie powiodło się" @@ -198,7 +200,7 @@ msgstr "" "negocjację treści. Język można wybrać za pomocą Accept-Language i parametru " "zapytania." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Pamięć podręczna we/wy" @@ -208,8 +210,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Zastosuj tylko klucz, aby odczytać dozwolone dane z pamięci podręcznej.\n" -"Zastosuj klucz, dane i limit czasu z uwierzytelnianiem, aby zapisać dane w " -"pamięci podręcznej." +"Zastosuj klucz, dane i limit czasu z uwierzytelnianiem, aby zapisać dane w pamięci podręcznej." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -223,7 +224,7 @@ msgstr "Uzyskaj dostępne parametry aplikacji" msgid "send a message to the support team" msgstr "Wyślij wiadomość do zespołu wsparcia" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Żądanie adresu URL CORSed. Dozwolony jest tylko protokół https." @@ -274,7 +275,8 @@ msgstr "" "nieedytowalnych" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Przepisanie niektórych pól istniejącej grupy atrybutów z zachowaniem " "atrybutów nieedytowalnych" @@ -329,7 +331,8 @@ msgstr "" "nieedytowalnych" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej wartości atrybutu, zapisując wartości " "nieedytowalne" @@ -366,9 +369,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -388,11 +391,11 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"Wyszukiwanie podciągów z uwzględnieniem wielkości liter w human_readable_id, " -"order_products.product.name i order_products.product.partnumber." +"Wyszukiwanie podciągów z uwzględnieniem wielkości liter w human_readable_id," +" order_products.product.name i order_products.product.partnumber." #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -425,14 +428,14 @@ msgstr "Filtrowanie według identyfikatora UUID użytkownika" #: engine/core/docs/drf/viewsets.py:318 msgid "Filter by order status (case-insensitive substring match)" msgstr "" -"Filtrowanie według statusu zamówienia (dopasowanie podciągu z uwzględnieniem " -"wielkości liter)" +"Filtrowanie według statusu zamówienia (dopasowanie podciągu z uwzględnieniem" +" wielkości liter)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Kolejność według jednego z: uuid, human_readable_id, user_email, user, " "status, created, modified, buy_time, random. Prefiks z \"-\" dla malejącego " @@ -444,7 +447,8 @@ msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)" #: engine/core/docs/drf/viewsets.py:341 msgid "Order UUID or human-readable id" -msgstr "Identyfikator UUID zamówienia lub identyfikator czytelny dla człowieka" +msgstr "" +"Identyfikator UUID zamówienia lub identyfikator czytelny dla człowieka" #: engine/core/docs/drf/viewsets.py:351 msgid "create an order" @@ -490,7 +494,7 @@ msgstr "pobieranie bieżącego oczekującego zamówienia użytkownika" msgid "retrieves a current pending order of an authenticated user" msgstr "pobiera bieżące oczekujące zamówienie uwierzytelnionego użytkownika" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "zakup zamówienia bez tworzenia konta" @@ -632,28 +636,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrowanie według jednej lub więcej par atrybut/wartość. \n" "- Składnia**: `attr_name=method-value[;attr2=method2-value2]...`\n" -"- **Metody** (domyślnie `icontains` jeśli pominięte): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"- Wpisywanie wartości**: JSON jest próbowany jako pierwszy (więc można " -"przekazywać listy/dykty), `true`/`false` dla booleans, integers, floats; w " -"przeciwnym razie traktowane jako string. \n" -"- Base64**: prefiks z `b64-` do bezpiecznego dla adresów URL kodowania " -"base64 surowej wartości. \n" +"- **Metody** (domyślnie `icontains` jeśli pominięte): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- Wpisywanie wartości**: JSON jest próbowany jako pierwszy (więc można przekazywać listy/dykty), `true`/`false` dla booleans, integers, floats; w przeciwnym razie traktowane jako string. \n" +"- Base64**: prefiks z `b64-` do bezpiecznego dla adresów URL kodowania base64 surowej wartości. \n" "Przykłady: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -668,12 +662,10 @@ msgstr "(dokładny) UUID produktu" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Rozdzielana przecinkami lista pól do posortowania. Prefiks z `-` dla " -"sortowania malejącego. \n" +"Rozdzielana przecinkami lista pól do posortowania. Prefiks z `-` dla sortowania malejącego. \n" "**Dozwolone:** uuid, rating, name, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -687,6 +679,9 @@ msgid "Product UUID or slug" msgstr "UUID produktu lub Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Tworzenie produktu" @@ -1124,248 +1119,249 @@ msgstr "Poziom" msgid "Product UUID" msgstr "UUID produktu" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Klucz do wyszukania lub ustawienia w pamięci podręcznej" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Dane do przechowywania w pamięci podręcznej" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Limit czasu w sekundach na wprowadzenie danych do pamięci podręcznej" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Dane w pamięci podręcznej" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Kamelizowane dane JSON z żądanego adresu URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Dodawanie produktu do zamówienia" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Nie znaleziono zamówienia {order_uuid}!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Usuń wszystkie produkty z zamówienia" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Kup zamówienie" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Wykonanie akcji na liście produktów w zamówieniu" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Usuń/Dodaj" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Akcją musi być \"dodaj\" lub \"usuń\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Wykonanie akcji na liście produktów na liście życzeń" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Podaj wartość `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista życzeń {wishlist_uuid} nie została znaleziona!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Dodawanie produktu do zamówienia" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Kup zamówienie" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Prześlij atrybuty jako ciąg znaków sformatowany w następujący sposób: " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Dodawanie lub usuwanie opinii dla produktu zamówienia" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Akcją musi być `add` lub `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nie został znaleziony!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Oryginalny ciąg adresu podany przez użytkownika" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Limit musi wynosić od 1 do 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - działa jak urok" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Atrybuty" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atrybuty pogrupowane" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupy atrybutów" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Marki" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procentowy narzut" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Które atrybuty i wartości mogą być używane do filtrowania tej kategorii." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Minimalne i maksymalne ceny produktów w tej kategorii, jeśli są dostępne." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tagi dla tej kategorii" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkty w tej kategorii" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Sprzedawcy" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Szerokość geograficzna (współrzędna Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Długość geograficzna (współrzędna X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Jak" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Wartość oceny od 1 do 10 włącznie lub 0, jeśli nie jest ustawiona." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Reprezentuje informacje zwrotne od użytkownika." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Powiadomienia" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Adres URL pobierania dla tego produktu zamówienia, jeśli dotyczy" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Informacje zwrotne" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Lista zamówionych produktów w tym zamówieniu" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Adres rozliczeniowy" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1373,53 +1369,53 @@ msgstr "" "Adres wysyłki dla tego zamówienia, pozostaw pusty, jeśli jest taki sam jak " "adres rozliczeniowy lub jeśli nie dotyczy" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Całkowita cena tego zamówienia" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Całkowita ilość produktów w zamówieniu" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transakcje dla tego zamówienia" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Zamówienia" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Adres URL obrazu" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Zdjęcia produktu" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategoria" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Informacje zwrotne" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Marka" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupy atrybutów" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1427,7 +1423,7 @@ msgstr "Grupy atrybutów" msgid "price" msgstr "Cena" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1435,39 +1431,39 @@ msgstr "Cena" msgid "quantity" msgstr "Ilość" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Liczba informacji zwrotnych" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkty dostępne tylko dla zamówień osobistych" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Cena rabatowa" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produkty" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkty w sprzedaży" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promocje" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Sprzedawca" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1475,99 +1471,98 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Listy życzeń" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produkty Tagged" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Tagi produktu" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Kategorie oznaczone tagami" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tagi kategorii" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nazwa projektu" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Nazwa firmy" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Adres firmy" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Numer telefonu firmy" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" -msgstr "" -"\"email from\", czasami musi być użyty zamiast wartości użytkownika hosta" +msgstr "\"email from\", czasami musi być użyty zamiast wartości użytkownika hosta" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Użytkownik hosta poczty e-mail" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Maksymalna kwota płatności" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Minimalna kwota płatności" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Dane analityczne" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Dane reklamowe" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfiguracja" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Kod języka" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Nazwa języka" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Flaga języka, jeśli istnieje :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Pobierz listę obsługiwanych języków" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Wyniki wyszukiwania produktów" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Wyniki wyszukiwania produktów" @@ -1613,8 +1608,8 @@ msgstr "" "Reprezentuje jednostkę dostawcy zdolną do przechowywania informacji o " "zewnętrznych dostawcach i ich wymaganiach dotyczących interakcji. Klasa " "Vendor służy do definiowania i zarządzania informacjami związanymi z " -"zewnętrznym dostawcą. Przechowuje nazwę dostawcy, szczegóły uwierzytelniania " -"wymagane do komunikacji oraz procentowe znaczniki stosowane do produktów " +"zewnętrznym dostawcą. Przechowuje nazwę dostawcy, szczegóły uwierzytelniania" +" wymagane do komunikacji oraz procentowe znaczniki stosowane do produktów " "pobieranych od dostawcy. Model ten zachowuje również dodatkowe metadane i " "ograniczenia, dzięki czemu nadaje się do użytku w systemach, które " "współpracują z zewnętrznymi dostawcami." @@ -1786,11 +1781,12 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Reprezentuje obiekt marki w systemie. Ta klasa obsługuje informacje i " -"atrybuty związane z marką, w tym jej nazwę, logo, opis, powiązane kategorie, " -"unikalny slug i kolejność priorytetów. Pozwala na organizację i " +"atrybuty związane z marką, w tym jej nazwę, logo, opis, powiązane kategorie," +" unikalny slug i kolejność priorytetów. Pozwala na organizację i " "reprezentację danych związanych z marką w aplikacji." #: engine/core/models.py:448 @@ -1835,8 +1831,8 @@ msgstr "Kategorie" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1988,8 +1984,8 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Reprezentuje atrybut w systemie. Ta klasa jest używana do definiowania i " @@ -2059,9 +2055,9 @@ msgstr "Atrybut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Reprezentuje określoną wartość atrybutu powiązanego z produktem. Łączy " "\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i " @@ -2082,8 +2078,8 @@ msgstr "Konkretna wartość dla tego atrybutu" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2095,7 +2091,8 @@ msgstr "" #: engine/core/models.py:826 msgid "provide alternative text for the image for accessibility" -msgstr "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" +msgstr "" +"Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" #: engine/core/models.py:827 msgid "image alt text" @@ -2131,12 +2128,12 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Reprezentuje kampanię promocyjną dla produktów z rabatem. Ta klasa służy do " -"definiowania i zarządzania kampaniami promocyjnymi, które oferują procentowy " -"rabat na produkty. Klasa zawiera atrybuty do ustawiania stopy rabatu, " +"definiowania i zarządzania kampaniami promocyjnymi, które oferują procentowy" +" rabat na produkty. Klasa zawiera atrybuty do ustawiania stopy rabatu, " "dostarczania szczegółów na temat promocji i łączenia jej z odpowiednimi " "produktami. Integruje się z katalogiem produktów w celu określenia pozycji, " "których dotyczy kampania." @@ -2181,8 +2178,8 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" "Reprezentuje listę życzeń użytkownika do przechowywania i zarządzania " -"pożądanymi produktami. Klasa zapewnia funkcjonalność do zarządzania kolekcją " -"produktów, wspierając operacje takie jak dodawanie i usuwanie produktów, a " +"pożądanymi produktami. Klasa zapewnia funkcjonalność do zarządzania kolekcją" +" produktów, wspierając operacje takie jak dodawanie i usuwanie produktów, a " "także wspierając operacje dodawania i usuwania wielu produktów jednocześnie." #: engine/core/models.py:926 @@ -2207,13 +2204,13 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Reprezentuje rekord dokumentu powiązany z produktem. Ta klasa służy do " -"przechowywania informacji o dokumentach związanych z określonymi produktami, " -"w tym przesyłanych plików i ich metadanych. Zawiera metody i właściwości do " -"obsługi typu pliku i ścieżki przechowywania plików dokumentów. Rozszerza " +"przechowywania informacji o dokumentach związanych z określonymi produktami," +" w tym przesyłanych plików i ich metadanych. Zawiera metody i właściwości do" +" obsługi typu pliku i ścieżki przechowywania plików dokumentów. Rozszerza " "funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " "funkcje." @@ -2231,14 +2228,14 @@ msgstr "Nierozwiązany" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Reprezentuje jednostkę adresu, która zawiera szczegóły lokalizacji i " "powiązania z użytkownikiem. Zapewnia funkcjonalność przechowywania danych " @@ -2246,8 +2243,8 @@ msgstr "" "Klasa ta została zaprojektowana do przechowywania szczegółowych informacji " "adresowych, w tym elementów takich jak ulica, miasto, region, kraj i " "geolokalizacja (długość i szerokość geograficzna). Obsługuje integrację z " -"interfejsami API geokodowania, umożliwiając przechowywanie nieprzetworzonych " -"odpowiedzi API do dalszego przetwarzania lub kontroli. Klasa umożliwia " +"interfejsami API geokodowania, umożliwiając przechowywanie nieprzetworzonych" +" odpowiedzi API do dalszego przetwarzania lub kontroli. Klasa umożliwia " "również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " "obsługę danych." @@ -2407,8 +2404,8 @@ msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2488,7 +2485,8 @@ msgstr "Zamówienie" #: engine/core/models.py:1319 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!" +msgstr "" +"Użytkownik może mieć tylko jedno oczekujące zlecenie w danym momencie!" #: engine/core/models.py:1351 msgid "you cannot add products to an order that is not a pending one" @@ -2585,8 +2583,8 @@ msgstr "" "temat konkretnych produktów, które zostały przez nich zakupione. Zawiera " "atrybuty do przechowywania komentarzy użytkowników, odniesienie do " "powiązanego produktu w zamówieniu oraz ocenę przypisaną przez użytkownika. " -"Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania " -"danymi opinii." +"Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania" +" danymi opinii." #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2597,7 +2595,8 @@ msgid "feedback comments" msgstr "Komentarze zwrotne" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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." @@ -2628,13 +2627,13 @@ msgid "" msgstr "" "Reprezentuje produkty powiązane z zamówieniami i ich atrybutami. Model " "OrderProduct przechowuje informacje o produkcie, który jest częścią " -"zamówienia, w tym szczegóły, takie jak cena zakupu, ilość, atrybuty produktu " -"i status. Zarządza powiadomieniami dla użytkownika i administratorów oraz " -"obsługuje operacje, takie jak zwracanie salda produktu lub dodawanie opinii. " -"Model ten zapewnia również metody i właściwości, które obsługują logikę " +"zamówienia, w tym szczegóły, takie jak cena zakupu, ilość, atrybuty produktu" +" i status. Zarządza powiadomieniami dla użytkownika i administratorów oraz " +"obsługuje operacje, takie jak zwracanie salda produktu lub dodawanie opinii." +" Model ten zapewnia również metody i właściwości, które obsługują logikę " "biznesową, taką jak obliczanie całkowitej ceny lub generowanie adresu URL " -"pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order " -"i Product i przechowuje odniesienia do nich." +"pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order" +" i Product i przechowuje odniesienia do nich." #: engine/core/models.py:1757 msgid "the price paid by the customer for this product at purchase time" @@ -2647,7 +2646,8 @@ msgstr "Cena zakupu w momencie zamówienia" #: engine/core/models.py:1763 msgid "internal comments for admins about this ordered product" msgstr "" -"Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego produktu" +"Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego " +"produktu" #: engine/core/models.py:1764 msgid "internal comments" @@ -2745,9 +2745,9 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Reprezentuje funkcjonalność pobierania zasobów cyfrowych powiązanych z " "zamówieniami. Klasa DigitalAssetDownload zapewnia możliwość zarządzania i " @@ -2813,8 +2813,7 @@ msgstr "Witaj %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Dziękujemy za zamówienie #%(order.pk)s! Z przyjemnością informujemy, że " @@ -2873,8 +2872,8 @@ msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "" -"Pomyślnie przetworzyliśmy Twoje zamówienie №%(order_uuid)s! Poniżej znajdują " -"się szczegóły zamówienia:" +"Pomyślnie przetworzyliśmy Twoje zamówienie №%(order_uuid)s! Poniżej znajdują" +" się szczegóły zamówienia:" #: engine/core/templates/digital_order_delivered_email.html:128 msgid "" @@ -2929,8 +2928,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Dziękujemy za zamówienie! Z przyjemnością potwierdzamy zakup. Poniżej " @@ -2973,23 +2971,23 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | zainicjowany kontakt" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | zainicjowany kontakt" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Potwierdzenie zamówienia" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | potwierdzenie zamówienia" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Zamówienie dostarczone" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | zamówienie dostarczone" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | przyznany kod promocyjny" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | przyznany kod promocyjny" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3020,8 +3018,8 @@ msgid "" "Content-Type header for XML." msgstr "" "Obsługuje szczegółową odpowiedź widoku dla mapy witryny. Ta funkcja " -"przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i " -"ustawia nagłówek Content-Type dla XML." +"przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i" +" ustawia nagłówek Content-Type dla XML." #: engine/core/views.py:123 msgid "" @@ -3063,14 +3061,10 @@ msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Obsługuje pobieranie zasobu cyfrowego powiązanego z zamówieniem.\n" -"Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu " -"przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest " -"błąd HTTP 404 wskazujący, że zasób jest niedostępny." +"Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3099,19 +3093,15 @@ msgstr "nie znaleziono favicon" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Obsługuje żądania favicon strony internetowej.\n" -"Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu " -"statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany " -"jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." +"Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Przekierowuje żądanie na stronę indeksu administratora. Funkcja obsługuje " @@ -3123,7 +3113,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Zwraca aktualną wersję aplikacji eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3137,20 +3127,21 @@ msgstr "" "dynamicznych klas serializatora w oparciu o bieżącą akcję, konfigurowalne " "uprawnienia i formaty renderowania." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Reprezentuje zestaw widoków do zarządzania obiektami AttributeGroup. " "Obsługuje operacje związane z AttributeGroup, w tym filtrowanie, " "serializację i pobieranie danych. Klasa ta jest częścią warstwy API " -"aplikacji i zapewnia ustandaryzowany sposób przetwarzania żądań i odpowiedzi " -"dla danych AttributeGroup." +"aplikacji i zapewnia ustandaryzowany sposób przetwarzania żądań i odpowiedzi" +" dla danych AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3166,21 +3157,21 @@ msgstr "" "filtrowanie według określonych pól lub pobieranie szczegółowych lub " "uproszczonych informacji w zależności od żądania." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"Zestaw widoków do zarządzania obiektami AttributeValue. Ten viewset zapewnia " -"funkcjonalność do listowania, pobierania, tworzenia, aktualizowania i " +"Zestaw widoków do zarządzania obiektami AttributeValue. Ten viewset zapewnia" +" funkcjonalność do listowania, pobierania, tworzenia, aktualizowania i " "usuwania obiektów AttributeValue. Integruje się z mechanizmami viewset " -"Django REST Framework i używa odpowiednich serializatorów dla różnych akcji. " -"Możliwości filtrowania są dostarczane przez DjangoFilterBackend." +"Django REST Framework i używa odpowiednich serializatorów dla różnych akcji." +" Możliwości filtrowania są dostarczane przez DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3189,12 +3180,12 @@ msgid "" "can access specific data." msgstr "" "Zarządza widokami dla operacji związanych z kategoriami. Klasa " -"CategoryViewSet jest odpowiedzialna za obsługę operacji związanych z modelem " -"kategorii w systemie. Obsługuje pobieranie, filtrowanie i serializowanie " +"CategoryViewSet jest odpowiedzialna za obsługę operacji związanych z modelem" +" kategorii w systemie. Obsługuje pobieranie, filtrowanie i serializowanie " "danych kategorii. Zestaw widoków wymusza również uprawnienia, aby zapewnić, " "że tylko autoryzowani użytkownicy mają dostęp do określonych danych." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3206,7 +3197,7 @@ msgstr "" "Brand. Używa frameworka ViewSet Django, aby uprościć implementację punktów " "końcowych API dla obiektów Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3220,11 +3211,11 @@ msgstr "" "zapewnia zestaw widoków do zarządzania produktami, w tym ich filtrowania, " "serializacji i operacji na konkretnych instancjach. Rozszerza się z " "`EvibesViewSet`, aby używać wspólnej funkcjonalności i integruje się z " -"frameworkiem Django REST dla operacji RESTful API. Zawiera metody pobierania " -"szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do " +"frameworkiem Django REST dla operacji RESTful API. Zawiera metody pobierania" +" szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do " "powiązanych informacji zwrotnych o produkcie." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3234,17 +3225,17 @@ msgid "" msgstr "" "Reprezentuje zestaw widoków do zarządzania obiektami Vendor. Ten zestaw " "widoków umożliwia pobieranie, filtrowanie i serializowanie danych dostawcy. " -"Definiuje zestaw zapytań, konfiguracje filtrów i klasy serializatora używane " -"do obsługi różnych działań. Celem tej klasy jest zapewnienie usprawnionego " +"Definiuje zestaw zapytań, konfiguracje filtrów i klasy serializatora używane" +" do obsługi różnych działań. Celem tej klasy jest zapewnienie usprawnionego " "dostępu do zasobów związanych z Vendorem poprzez framework Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Reprezentacja zestawu widoków obsługujących obiekty opinii. Ta klasa " @@ -3255,14 +3246,14 @@ msgstr "" "bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do " "odpytywania danych." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet do zarządzania zamówieniami i powiązanymi operacjami. Klasa ta " @@ -3274,12 +3265,12 @@ msgstr "" "wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " "odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Udostępnia zestaw widoków do zarządzania jednostkami OrderProduct. Ten " @@ -3289,31 +3280,31 @@ msgstr "" "szczegółową akcję do obsługi informacji zwrotnych na temat instancji " "OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Zarządza operacjami związanymi z obrazami produktów w aplikacji." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" "Zarządza pobieraniem i obsługą instancji PromoCode poprzez różne akcje API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Obsługuje operacje związane z danymi Stock w systemie." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3326,7 +3317,7 @@ msgstr "" "że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " "zostaną przyznane wyraźne uprawnienia." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3337,15 +3328,15 @@ msgstr "" "Ta klasa zapewnia funkcjonalność zestawu widoków do zarządzania obiektami " "`Address`. Klasa AddressViewSet umożliwia operacje CRUD, filtrowanie i " "niestandardowe akcje związane z jednostkami adresowymi. Obejmuje ona " -"wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera " -"i obsługę uprawnień w oparciu o kontekst żądania." +"wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera" +" i obsługę uprawnień w oparciu o kontekst żądania." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.mo b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo index 046c18117f682f083a77bf505bb627a4972540b3..d23de866a44aecf9f0c1444dde5ff74b512867eb 100644 GIT binary patch delta 5499 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 delta 5489 zcmZ|Sd0f{;9>?+d{=j=ZLGi?&m?$8q9A03c;+=}9crHSKc++Zaht?0aa$8BP$WZHH z-j$`fvFYmSVp67fv}@*;re&pO>Uy9p9$Wi*|K{tT>p#z#`Ofb0oPnLO6eI9&Zu>cGN4?2jV{#p1Vlaey=|{$_rv5J0r#`&Wn8r9B z>tP@c?lD!JD(a8hrO^p&c=Uxm;lb9{#2DQZSg{tk3lE|9x|pU&T(CjTJcFt#2PHX z_`}A8;|BZ-10KTpSa{T!6xyplGbRh;|G`RWUyl6Ly#7xjK|TMNF-g>){oI(1xYtLa z4u$E*ZAj;#23U*=(H3lgm8gh(h6?>jtc^EN5x9+mvDp{KoMoU%m`6SFUv{EvQCpSq zm5to3lU85gDPy|RF$e=O6_aro?!Z5xa-sj%#(adcQ3FSxwtF3qnoug1GQd>SM6aDO zCXD)B{24>PW#!oXJ7dXI=f{NRVn z#;l{h;HohfvBh=T7|2xH7oWrK^b5OX%pjV_{>PYX`mMwsc(=xm6Me^+o%FkM*O>Pm z_W!M4co7{Y7{@H;L6XNY`>0n2I_5oGT-z}td0|{#$An=K#^DAG#xF4duV7ugjbK zcI<;cU_T5Evi+vIF2o76uRZ#`Q0#&eP%9`zZOIbU%9p$C@1XXy+-*OM>h~>bz)Pq|{MW5F;`-}M-HUqfP-KEW zlTJZDoP=6QE@~oAVq<&(m3%8u$7TmA0=wPk`%n`*h8p-hDgrgA0h_e76X}g@s1HL; zJP+G4zIld%27cY&V9Yku3y+{)coy};YE%w1ZfDygU6W9u9)(J>@u*`~gt{*_p^oK2 z9D=to8T*H_P@VrG3eE8))WDliNw*7?JV#IiUvi(BDR>b_atf%D&&!eJVe6m|GwC}d4>6vm@g{w!+1)u_GS?$&ps20V`1 z)6=N;{EXevbhH;!58O(%0JXr-2W$i*9`M<{NTHzt4+?P%zKD5v29q$glO4DSwU>Xy zPPhZL=ciE@RK0M!1sSNw%y#u*d+MdAKV-^L3p%0)8t5EO#u1(E1U8{URf9^tUr`Zh z)5V5#7S^Hu1Zto{)WlvzP3U9y`8Cu)HK-hE65*I(7>>G#e2-Aj1+*SDv-6mSCerbL zM#rEcQ-<2h^{6EKGxo#%sBb}Flw+1*ENYAPp^o1H)G4}#9nsU(=0-Srb^a45JjjC# z)Lt(~g?t-ofGen(Mn&5dW?~%m5>)#>w|)z?kcb$^|0mlV)W_*@~N(28UALgG#R2J?!tAVl(QkQ5RP< zYO7*VksPe&I{)J+C{+2VW3vnu;?<}eD97Ho3pK%N%*60myTa#D6RtqzKsD-j9pmht zN1}2d1smf;)RxRZpR)2P3i=wYLJjaKYUX!PcX-2idtrp4j^{ws#WNk1gwLan-%?a0 zH=#aWU!&erjXLJF6YK=~qZT?Qf%C5cvS`qYe}_tvS5bTaSM;A})HydjZ3ydOBGq=N zy`6-*P>L}H_qopldO4;8^<*4@*{FfHpvK$Xi}SBgeM5ux?mTKm*HJ6DjS5wh-gYHn zsNPC8#Z2hl;=s)B>tdk@_6<-pf7;n#nJyW7MIKeer12i>9IO z>IJBQR-huZ6}7Tss5}0q`@C6SyO1uZq>V#OU?l1oXQ6Uw4(h$WjTDqLRX7Cipl-GS ziFRT$P#07&s{OiaNRl0>A8KMlF$ObnBre6NcnV{&cR%~L;A~WcE0Kx&%pnR2{YBLA zy6M{VLA%lzRC~H>f$NK?3BQBkcpVkemdTEphLJc9m!S6k8@C>nVsoYtJL&v?KtWmi zB`V~N`rD9(VK3?_*dL$36x@aCe;0MZ^cZ0K%|_MNV+x)|C1vP9`}^^z3#beS;0f%j z^WQ4fb{vPw=3>;qdr)7oTd3m`KFHpT*{GGTMh$o#)!#eV@&6xiBI>LH`;=}EyT>S?HB zxCj^F%cvY_lxB~yH_d0WF^LB4eJaM|L{ye8MID#rI1`Uz0QMeZ?~NqXU(W+k6G=l2 z_GOhzrtS42TK+AdV`oj~n*-3%Mzbkv@fxb;&w zgL=pWd+rOd7WLOqk$3~O@^?_jvJ!QCe?nbAbtc;9K}ZhyOf&`kumC6FBGesy0`-wO zhf1!%NjCeZpdz*cwSuE=z0PFYzaQ$Vor?N~DK5syM8$LjVcqeKP&!Z-G8?~1$r`ls0iQ1|u*awSIIrIr;;}J~4Zojqfn}b7i z{#Q~^lAOg3cmuT+!I?I6gHZ$JpjP}CYGqqd$MG_b!QRvC^ChTnNhNCUucP`!WZA8K z43*>+n7xd`O$xf1p3An!s1k=#zl`db@UUa%;VjgJ^c8A_^>gfsQ&CCzC@REnpdz*( z+mt7C>E$>@rE?<^Jw8wA=7`oF{tn(Bu~|#<|7%2p{{5l6C~{hW=NV7wchQ^GsU&8x z=V?!Qi*6?asFvS|UFCQRJ>@0wTbI<%DVR5XW`5b494EMRZAFk3;EIMcDmb z_i~($rHK{8%6slTz3zTvZjKY5XD2jp{#g(9_;U-hq1i{JGhcZ&j`@ q@a7hHAIZy|nOk5M{-6G7{>R?Dd5_M|%YQ8Ie!nseT-Ged8TLPB73\n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Está ativo" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Se definido como false, esse objeto não poderá ser visto por usuários sem a " "permissão necessária" @@ -50,89 +51,89 @@ msgstr "Modificado" msgid "when the object was last modified" msgstr "Quando o objeto foi editado pela última vez" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Traduções" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Geral" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relações" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "informações adicionais" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadados" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Carimbos de data/hora" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Ativar o %(verbose_name_plural)s selecionado" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Os itens selecionados foram ativados!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Desativar o %(verbose_name_plural)s selecionado" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Os itens selecionados foram desativados!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Valor do atributo" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Valores de atributos" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Imagem" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Imagens" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Estoque" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Ações" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Pedido de produto" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Solicitar produtos" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Crianças" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Configuração" @@ -156,7 +157,8 @@ msgstr "Entregue" msgid "canceled" msgstr "Cancelado" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Falha" @@ -198,7 +200,7 @@ msgstr "" "negociação de conteúdo. O idioma pode ser selecionado com Accept-Language e " "com o parâmetro de consulta." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "E/S do cache" @@ -208,8 +210,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Aplicar somente uma chave para ler dados permitidos do cache.\n" -"Aplicar chave, dados e tempo limite com autenticação para gravar dados no " -"cache." +"Aplicar chave, dados e tempo limite com autenticação para gravar dados no cache." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -223,7 +224,7 @@ msgstr "Obter os parâmetros expostos do aplicativo" msgid "send a message to the support team" msgstr "Envie uma mensagem para a equipe de suporte" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Solicite um URL com CORS. Somente https é permitido." @@ -273,7 +274,8 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "Reescrever um grupo de atributos existente salvando os não editáveis" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Reescreva alguns campos de um grupo de atributos existente salvando os não " "editáveis" @@ -324,7 +326,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "Reescreva um valor de atributo existente salvando os não editáveis" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Reescreva alguns campos de um valor de atributo existente salvando os não " "editáveis" @@ -360,9 +363,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Meta snapshot de SEO" @@ -381,12 +384,12 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Pesquisa de substring sem distinção entre maiúsculas e minúsculas em " -"human_readable_id, order_products.product.name e order_products.product." -"partnumber" +"human_readable_id, order_products.product.name e " +"order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -422,9 +425,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Ordene por uma das seguintes opções: uuid, human_readable_id, user_email, " "user, status, created, modified, buy_time, random. Prefixe com '-' para " @@ -481,7 +484,7 @@ msgstr "recuperar o pedido pendente atual de um usuário" msgid "retrieves a current pending order of an authenticated user" msgstr "recupera um pedido pendente atual de um usuário autenticado" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "comprar um pedido sem criar uma conta" @@ -580,7 +583,8 @@ msgstr "recuperar a lista de desejos pendente atual de um usuário" #: engine/core/docs/drf/viewsets.py:504 msgid "retrieves a current pending wishlist of an authenticated user" -msgstr "recupera uma lista de desejos pendente atual de um usuário autenticado" +msgstr "" +"recupera uma lista de desejos pendente atual de um usuário autenticado" #: engine/core/docs/drf/viewsets.py:514 msgid "add product to wishlist" @@ -625,28 +629,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrar por um ou mais pares de nome/valor de atributo. \n" "- **Sintaxe**: `attr_name=method-value[;attr2=method2-value2]...`\n" -"- Métodos** (o padrão é `icontains` se omitido): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"- Digitação de valores**: JSON é tentado primeiro (para que você possa " -"passar listas/dicas), `true`/`false` para booleanos, inteiros, flutuantes; " -"caso contrário, é tratado como string. \n" -"- Base64**: prefixo com `b64-` para codificar o valor bruto com base64 de " -"forma segura para a URL. \n" +"- Métodos** (o padrão é `icontains` se omitido): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- Digitação de valores**: JSON é tentado primeiro (para que você possa passar listas/dicas), `true`/`false` para booleanos, inteiros, flutuantes; caso contrário, é tratado como string. \n" +"- Base64**: prefixo com `b64-` para codificar o valor bruto com base64 de forma segura para a URL. \n" "Exemplos: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -661,14 +655,11 @@ msgstr "UUID (exato) do produto" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Lista de campos separada por vírgulas para classificação. Prefixe com `-` " -"para classificação decrescente. \n" -"**Permitido:** uuid, classificação, nome, slug, criado, modificado, preço, " -"aleatório" +"Lista de campos separada por vírgulas para classificação. Prefixe com `-` para classificação decrescente. \n" +"**Permitido:** uuid, classificação, nome, slug, criado, modificado, preço, aleatório" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -681,6 +672,9 @@ msgid "Product UUID or slug" msgstr "UUID ou Slug do produto" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Criar um produto" @@ -896,7 +890,8 @@ msgstr "Delete a promo code" #: engine/core/docs/drf/viewsets.py:1124 msgid "rewrite an existing promo code saving non-editables" -msgstr "Reescreva um código promocional existente salvando itens não editáveis" +msgstr "" +"Reescreva um código promocional existente salvando itens não editáveis" #: engine/core/docs/drf/viewsets.py:1131 msgid "rewrite some fields of an existing promo code saving non-editables" @@ -1108,247 +1103,248 @@ msgstr "Nível" msgid "Product UUID" msgstr "UUID do produto" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Chave para procurar ou colocar no cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Dados a serem armazenados no cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Tempo limite em segundos para definir os dados para o cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Dados em cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Dados JSON camelizados da URL solicitada" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Somente URLs que começam com http(s):// são permitidos" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Adicionar um produto ao pedido" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} não encontrado!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Remover todos os produtos do pedido" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Comprar um pedido" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Executar uma ação em uma lista de produtos no pedido" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Remover/Adicionar" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "A ação deve ser \"adicionar\" ou \"remover\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Executar uma ação em uma lista de produtos na lista de desejos" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Forneça o valor `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de desejos {wishlist_uuid} não encontrada!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Adicionar um produto ao pedido" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Comprar um pedido" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Envie os atributos como uma string formatada como attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Adicionar ou excluir um feedback para o produto do pedido" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "A ação deve ser `add` ou `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} não encontrado!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Cadeia de endereços original fornecida pelo usuário" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "O limite deve estar entre 1 e 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona muito bem" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Atributos" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atributos agrupados" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Categorias" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Marcas" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorias" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Porcentagem de marcação" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quais atributos e valores podem ser usados para filtrar essa categoria." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "Preços mínimo e máximo dos produtos dessa categoria, se disponíveis." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags para esta categoria" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produtos desta categoria" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendors" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (coordenada Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (coordenada X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Como fazer" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Valor de classificação de 1 a 10, inclusive, ou 0 se não estiver definido." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representa o feedback de um usuário." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Notificações" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL de download para este produto do pedido, se aplicável" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Uma lista dos produtos solicitados nesse pedido" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Endereço de cobrança" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1356,53 +1352,53 @@ msgstr "" "Endereço de entrega para este pedido, deixe em branco se for o mesmo que o " "endereço de cobrança ou se não for aplicável" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Preço total deste pedido" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Quantidade total de produtos no pedido" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Todos os produtos estão no pedido digital?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transações para esta ordem" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Pedidos" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL da imagem" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Imagens do produto" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Categoria" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Feedbacks" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1410,7 +1406,7 @@ msgstr "Grupos de atributos" msgid "price" msgstr "Preço" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1418,39 +1414,39 @@ msgstr "Preço" msgid "quantity" msgstr "Quantidade" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Número de feedbacks" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produtos disponíveis apenas para pedidos pessoais" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Preço com desconto" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produtos" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Códigos promocionais" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produtos à venda" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promoções" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendor" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1458,99 +1454,99 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Listas de desejos" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produtos marcados" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Etiquetas do produto" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Categorias de tags" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tags das categorias" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nome do projeto" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Nome da empresa" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Endereço da empresa" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Número de telefone da empresa" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', às vezes ele deve ser usado em vez do valor do usuário do host" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Usuário do host de e-mail" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Valor máximo para pagamento" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Valor mínimo para pagamento" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Dados analíticos" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Dados do anúncio" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configuração" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Código do idioma" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Nome do idioma" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Sinalizador de idioma, se houver :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Obter uma lista de idiomas suportados" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Resultados da pesquisa de produtos" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Resultados da pesquisa de produtos" @@ -1597,9 +1593,9 @@ msgstr "" "fornecedores externos e seus requisitos de interação. A classe Vendor é " "usada para definir e gerenciar informações relacionadas a um fornecedor " "externo. Ela armazena o nome do fornecedor, os detalhes de autenticação " -"necessários para a comunicação e a marcação percentual aplicada aos produtos " -"recuperados do fornecedor. Esse modelo também mantém metadados e restrições " -"adicionais, tornando-o adequado para uso em sistemas que interagem com " +"necessários para a comunicação e a marcação percentual aplicada aos produtos" +" recuperados do fornecedor. Esse modelo também mantém metadados e restrições" +" adicionais, tornando-o adequado para uso em sistemas que interagem com " "fornecedores terceirizados." #: engine/core/models.py:124 @@ -1770,13 +1766,14 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"Representa um objeto de marca no sistema. Essa classe lida com informações e " -"atributos relacionados a uma marca, incluindo seu nome, logotipos, " +"Representa um objeto de marca no sistema. Essa classe lida com informações e" +" atributos relacionados a uma marca, incluindo seu nome, logotipos, " "descrição, categorias associadas, um slug exclusivo e ordem de prioridade. " -"Ela permite a organização e a representação de dados relacionados à marca no " -"aplicativo." +"Ela permite a organização e a representação de dados relacionados à marca no" +" aplicativo." #: engine/core/models.py:448 msgid "name of this brand" @@ -1820,8 +1817,8 @@ msgstr "Categorias" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1915,8 +1912,8 @@ msgstr "" "utilitárias relacionadas para recuperar classificações, contagens de " "feedback, preço, quantidade e total de pedidos. Projetado para uso em um " "sistema que lida com comércio eletrônico ou gerenciamento de estoque. Essa " -"classe interage com modelos relacionados (como Category, Brand e ProductTag) " -"e gerencia o armazenamento em cache das propriedades acessadas com " +"classe interage com modelos relacionados (como Category, Brand e ProductTag)" +" e gerencia o armazenamento em cache das propriedades acessadas com " "frequência para melhorar o desempenho. É usada para definir e manipular " "dados de produtos e suas informações associadas em um aplicativo." @@ -1973,14 +1970,14 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Representa um atributo no sistema. Essa classe é usada para definir e " "gerenciar atributos, que são partes personalizáveis de dados que podem ser " -"associadas a outras entidades. Os atributos têm categorias, grupos, tipos de " -"valores e nomes associados. O modelo é compatível com vários tipos de " +"associadas a outras entidades. Os atributos têm categorias, grupos, tipos de" +" valores e nomes associados. O modelo é compatível com vários tipos de " "valores, incluindo string, inteiro, float, booleano, matriz e objeto. Isso " "permite a estruturação dinâmica e flexível dos dados." @@ -2044,13 +2041,13 @@ msgstr "Atributo" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Representa um valor específico para um atributo que está vinculado a um " -"produto. Ele vincula o \"atributo\" a um \"valor\" exclusivo, permitindo uma " -"melhor organização e representação dinâmica das características do produto." +"produto. Ele vincula o \"atributo\" a um \"valor\" exclusivo, permitindo uma" +" melhor organização e representação dinâmica das características do produto." #: engine/core/models.py:788 msgid "attribute of this value" @@ -2067,20 +2064,21 @@ msgstr "O valor específico para esse atributo" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Representa uma imagem de produto associada a um produto no sistema. Essa " "classe foi projetada para gerenciar imagens de produtos, incluindo a " "funcionalidade de carregar arquivos de imagem, associá-los a produtos " -"específicos e determinar sua ordem de exibição. Ela também inclui um recurso " -"de acessibilidade com texto alternativo para as imagens." +"específicos e determinar sua ordem de exibição. Ela também inclui um recurso" +" de acessibilidade com texto alternativo para as imagens." #: engine/core/models.py:826 msgid "provide alternative text for the image for accessibility" -msgstr "Forneça um texto alternativo para a imagem para fins de acessibilidade" +msgstr "" +"Forneça um texto alternativo para a imagem para fins de acessibilidade" #: engine/core/models.py:827 msgid "image alt text" @@ -2116,8 +2114,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Representa uma campanha promocional para produtos com desconto. Essa classe " "é usada para definir e gerenciar campanhas promocionais que oferecem um " @@ -2167,8 +2165,8 @@ msgid "" msgstr "" "Representa a lista de desejos de um usuário para armazenar e gerenciar os " "produtos desejados. A classe oferece funcionalidade para gerenciar uma " -"coleção de produtos, suportando operações como adicionar e remover produtos, " -"bem como operações de suporte para adicionar e remover vários produtos de " +"coleção de produtos, suportando operações como adicionar e remover produtos," +" bem como operações de suporte para adicionar e remover vários produtos de " "uma só vez." #: engine/core/models.py:926 @@ -2193,15 +2191,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"Representa um registro de documentário vinculado a um produto. Essa classe é " -"usada para armazenar informações sobre documentários relacionados a produtos " -"específicos, incluindo uploads de arquivos e seus metadados. Ela contém " -"métodos e propriedades para lidar com o tipo de arquivo e o caminho de " -"armazenamento dos arquivos do documentário. Ela estende a funcionalidade de " -"mixins específicos e fornece recursos personalizados adicionais." +"Representa um registro de documentário vinculado a um produto. Essa classe é" +" usada para armazenar informações sobre documentários relacionados a " +"produtos específicos, incluindo uploads de arquivos e seus metadados. Ela " +"contém métodos e propriedades para lidar com o tipo de arquivo e o caminho " +"de armazenamento dos arquivos do documentário. Ela estende a funcionalidade " +"de mixins específicos e fornece recursos personalizados adicionais." #: engine/core/models.py:998 msgid "documentary" @@ -2217,21 +2215,21 @@ msgstr "Não resolvido" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Representa uma entidade de endereço que inclui detalhes de localização e " "associações com um usuário. Fornece funcionalidade para armazenamento de " "dados geográficos e de endereço, bem como integração com serviços de " "geocodificação. Essa classe foi projetada para armazenar informações " -"detalhadas de endereço, incluindo componentes como rua, cidade, região, país " -"e geolocalização (longitude e latitude). Ela oferece suporte à integração " +"detalhadas de endereço, incluindo componentes como rua, cidade, região, país" +" e geolocalização (longitude e latitude). Ela oferece suporte à integração " "com APIs de geocodificação, permitindo o armazenamento de respostas brutas " "de API para processamento ou inspeção posterior. A classe também permite " "associar um endereço a um usuário, facilitando o tratamento personalizado " @@ -2378,8 +2376,8 @@ msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -"Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não " -"ambos ou nenhum." +"Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" +" ambos ou nenhum." #: engine/core/models.py:1171 msgid "promocode already used" @@ -2394,8 +2392,8 @@ msgstr "Tipo de desconto inválido para o código promocional {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2507,7 +2505,8 @@ msgstr "O código promocional não existe" #: engine/core/models.py:1454 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!" +"Você só pode comprar produtos físicos com o endereço de entrega " +"especificado!" #: engine/core/models.py:1473 msgid "address does not exist" @@ -2563,8 +2562,8 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" "Gerencia o feedback dos usuários sobre os produtos. Essa classe foi criada " -"para capturar e armazenar o feedback dos usuários sobre produtos específicos " -"que eles compraram. Ela contém atributos para armazenar comentários de " +"para capturar e armazenar o feedback dos usuários sobre produtos específicos" +" que eles compraram. Ela contém atributos para armazenar comentários de " "usuários, uma referência ao produto relacionado no pedido e uma " "classificação atribuída pelo usuário. A classe usa campos de banco de dados " "para modelar e gerenciar com eficiência os dados de feedback." @@ -2579,10 +2578,11 @@ msgid "feedback comments" msgstr "Comentários de feedback" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" +"Faz referência ao produto específico em um pedido sobre o qual se trata esse" +" feedback" #: engine/core/models.py:1720 msgid "related order product" @@ -2609,9 +2609,9 @@ msgid "" "Product models and stores a reference to them." msgstr "" "Representa produtos associados a pedidos e seus atributos. O modelo " -"OrderProduct mantém informações sobre um produto que faz parte de um pedido, " -"incluindo detalhes como preço de compra, quantidade, atributos do produto e " -"status. Ele gerencia as notificações para o usuário e os administradores e " +"OrderProduct mantém informações sobre um produto que faz parte de um pedido," +" incluindo detalhes como preço de compra, quantidade, atributos do produto e" +" status. Ele gerencia as notificações para o usuário e os administradores e " "trata de operações como devolver o saldo do produto ou adicionar feedback. " "Esse modelo também fornece métodos e propriedades que dão suporte à lógica " "comercial, como o cálculo do preço total ou a geração de um URL de download " @@ -2725,16 +2725,16 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Representa a funcionalidade de download de ativos digitais associados a " "pedidos. A classe DigitalAssetDownload oferece a capacidade de gerenciar e " -"acessar downloads relacionados a produtos de pedidos. Ela mantém informações " -"sobre o produto do pedido associado, o número de downloads e se o ativo está " -"visível publicamente. Ela inclui um método para gerar um URL para download " -"do ativo quando o pedido associado estiver em um status concluído." +"acessar downloads relacionados a produtos de pedidos. Ela mantém informações" +" sobre o produto do pedido associado, o número de downloads e se o ativo " +"está visível publicamente. Ela inclui um método para gerar um URL para " +"download do ativo quando o pedido associado estiver em um status concluído." #: engine/core/models.py:1961 msgid "download" @@ -2792,8 +2792,7 @@ msgstr "Olá %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Obrigado por seu pedido #%(order.pk)s! Temos o prazer de informá-lo de que " @@ -2907,8 +2906,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Obrigado por seu pedido! Temos o prazer de confirmar sua compra. Abaixo " @@ -2949,23 +2947,23 @@ msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | entre em contato conosco iniciado" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | entre em contato conosco iniciado" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmação do pedido" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmação do pedido" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Pedido entregue" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | pedido entregue" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode granted" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode granted" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2987,8 +2985,8 @@ msgid "" "ensures the response includes the appropriate content type header for XML." msgstr "" "Trata a solicitação do índice do mapa do site e retorna uma resposta XML. " -"Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado " -"para XML." +"Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado" +" para XML." #: engine/core/views.py:88 msgid "" @@ -3015,8 +3013,8 @@ msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -"Manipula operações de cache, como ler e definir dados de cache com uma chave " -"e um tempo limite especificados." +"Manipula operações de cache, como ler e definir dados de cache com uma chave" +" e um tempo limite especificados." #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -3041,14 +3039,10 @@ msgstr "Lida com a lógica de comprar como uma empresa sem registro." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Trata do download de um ativo digital associado a um pedido.\n" -"Essa função tenta servir o arquivo de ativo digital localizado no diretório " -"de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um " -"erro HTTP 404 para indicar que o recurso não está disponível." +"Essa função tenta servir o arquivo de ativo digital localizado no diretório de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3077,23 +3071,19 @@ msgstr "favicon não encontrado" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Trata as solicitações do favicon de um site.\n" -"Essa função tenta servir o arquivo favicon localizado no diretório estático " -"do projeto. Se o arquivo favicon não for encontrado, será gerado um erro " -"HTTP 404 para indicar que o recurso não está disponível." +"Essa função tenta servir o arquivo favicon localizado no diretório estático do projeto. Se o arquivo favicon não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"Redireciona a solicitação para a página de índice do administrador. A função " -"lida com as solicitações HTTP recebidas e as redireciona para a página de " +"Redireciona a solicitação para a página de índice do administrador. A função" +" lida com as solicitações HTTP recebidas e as redireciona para a página de " "índice da interface de administração do Django. Ela usa a função `redirect` " "do Django para lidar com o redirecionamento HTTP." @@ -3101,7 +3091,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Retorna a versão atual do eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3109,18 +3099,19 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"Define um conjunto de visualizações para gerenciar operações relacionadas ao " -"Evibes. A classe EvibesViewSet é herdeira do ModelViewSet e oferece " +"Define um conjunto de visualizações para gerenciar operações relacionadas ao" +" Evibes. A classe EvibesViewSet é herdeira do ModelViewSet e oferece " "funcionalidade para lidar com ações e operações em entidades Evibes. Ela " "inclui suporte para classes de serializadores dinâmicos com base na ação " "atual, permissões personalizáveis e formatos de renderização." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Representa um conjunto de visualizações para gerenciar objetos " "AttributeGroup. Trata das operações relacionadas ao AttributeGroup, " @@ -3128,7 +3119,7 @@ msgstr "" "parte da camada de API do aplicativo e fornece uma maneira padronizada de " "processar solicitações e respostas para dados do AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3137,20 +3128,20 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"Trata de operações relacionadas a objetos de atributo no aplicativo. Fornece " -"um conjunto de pontos de extremidade de API para interagir com dados de " +"Trata de operações relacionadas a objetos de atributo no aplicativo. Fornece" +" um conjunto de pontos de extremidade de API para interagir com dados de " "atributos. Essa classe gerencia a consulta, a filtragem e a serialização de " -"objetos Attribute, permitindo o controle dinâmico dos dados retornados, como " -"a filtragem por campos específicos ou a recuperação de informações " +"objetos Attribute, permitindo o controle dinâmico dos dados retornados, como" +" a filtragem por campos específicos ou a recuperação de informações " "detalhadas ou simplificadas, dependendo da solicitação." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Um conjunto de exibições para gerenciar objetos AttributeValue. Esse " "conjunto de visualizações fornece funcionalidade para listar, recuperar, " @@ -3159,7 +3150,7 @@ msgstr "" "serializadores apropriados para diferentes ações. Os recursos de filtragem " "são fornecidos por meio do DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3170,23 +3161,23 @@ msgstr "" "Gerencia as visualizações das operações relacionadas à categoria. A classe " "CategoryViewSet é responsável pelo tratamento das operações relacionadas ao " "modelo de categoria no sistema. Ela suporta a recuperação, a filtragem e a " -"serialização de dados de categoria. O conjunto de visualizações também impõe " -"permissões para garantir que somente usuários autorizados possam acessar " +"serialização de dados de categoria. O conjunto de visualizações também impõe" +" permissões para garantir que somente usuários autorizados possam acessar " "dados específicos." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." msgstr "" -"Representa um conjunto de visualizações para gerenciar instâncias de marcas. " -"Essa classe fornece funcionalidade para consulta, filtragem e serialização " +"Representa um conjunto de visualizações para gerenciar instâncias de marcas." +" Essa classe fornece funcionalidade para consulta, filtragem e serialização " "de objetos de marca. Ela usa a estrutura ViewSet do Django para simplificar " "a implementação de pontos de extremidade da API para objetos de marca." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3198,13 +3189,13 @@ msgid "" msgstr "" "Gerencia as operações relacionadas ao modelo `Product` no sistema. Essa " "classe fornece um conjunto de visualizações para gerenciar produtos, " -"incluindo filtragem, serialização e operações em instâncias específicas. Ela " -"se estende do `EvibesViewSet` para usar a funcionalidade comum e se integra " -"à estrutura Django REST para operações de API RESTful. Inclui métodos para " +"incluindo filtragem, serialização e operações em instâncias específicas. Ela" +" se estende do `EvibesViewSet` para usar a funcionalidade comum e se integra" +" à estrutura Django REST para operações de API RESTful. Inclui métodos para " "recuperar detalhes do produto, aplicar permissões e acessar o feedback " "relacionado de um produto." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3216,65 +3207,65 @@ msgstr "" "fornecedor. Esse conjunto de visualizações permite a busca, a filtragem e a " "serialização de dados do fornecedor. Ele define o conjunto de consultas, as " "configurações de filtro e as classes de serializador usadas para lidar com " -"diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos " -"recursos relacionados ao Vendor por meio da estrutura Django REST." +"diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos" +" recursos relacionados ao Vendor por meio da estrutura Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Representação de um conjunto de visualizações que manipula objetos de " -"feedback. Essa classe gerencia operações relacionadas a objetos de feedback, " -"incluindo listagem, filtragem e recuperação de detalhes. O objetivo desse " +"feedback. Essa classe gerencia operações relacionadas a objetos de feedback," +" incluindo listagem, filtragem e recuperação de detalhes. O objetivo desse " "conjunto de visualizações é fornecer serializadores diferentes para ações " "diferentes e implementar o manuseio baseado em permissão de objetos de " -"feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema " -"de filtragem do Django para consultar dados." +"feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema" +" de filtragem do Django para consultar dados." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" -"ViewSet para gerenciar pedidos e operações relacionadas. Essa classe oferece " -"funcionalidade para recuperar, modificar e gerenciar objetos de pedido. Ela " -"inclui vários pontos de extremidade para lidar com operações de pedidos, " +"ViewSet para gerenciar pedidos e operações relacionadas. Essa classe oferece" +" funcionalidade para recuperar, modificar e gerenciar objetos de pedido. Ela" +" inclui vários pontos de extremidade para lidar com operações de pedidos, " "como adicionar ou remover produtos, realizar compras para usuários " "registrados e não registrados e recuperar os pedidos pendentes do usuário " "autenticado atual. O ViewSet usa vários serializadores com base na ação " "específica que está sendo executada e impõe as permissões de acordo com a " "interação com os dados do pedido." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Fornece um conjunto de visualizações para gerenciar entidades OrderProduct. " -"Esse conjunto de visualizações permite operações CRUD e ações personalizadas " -"específicas do modelo OrderProduct. Ele inclui filtragem, verificações de " +"Esse conjunto de visualizações permite operações CRUD e ações personalizadas" +" específicas do modelo OrderProduct. Ele inclui filtragem, verificações de " "permissão e troca de serializador com base na ação solicitada. Além disso, " "fornece uma ação detalhada para lidar com feedback sobre instâncias de " "OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3282,20 +3273,20 @@ msgstr "" "Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de " "várias ações de API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Representa um conjunto de visualizações para gerenciar promoções." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Trata de operações relacionadas a dados de estoque no sistema." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3309,7 +3300,7 @@ msgstr "" "possam gerenciar suas próprias listas de desejos, a menos que sejam " "concedidas permissões explícitas." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3318,18 +3309,18 @@ msgid "" "on the request context." msgstr "" "Essa classe fornece a funcionalidade de conjunto de visualizações para " -"gerenciar objetos `Address`. A classe AddressViewSet permite operações CRUD, " -"filtragem e ações personalizadas relacionadas a entidades de endereço. Ela " +"gerenciar objetos `Address`. A classe AddressViewSet permite operações CRUD," +" filtragem e ações personalizadas relacionadas a entidades de endereço. Ela " "inclui comportamentos especializados para diferentes métodos HTTP, " "substituições de serializadores e tratamento de permissões com base no " "contexto da solicitação." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.mo b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo index c2246d527917daa54147340892fa606d6f137857..46e65b89d7c9be5148c46ea761968bc25da0d559 100644 GIT binary patch delta 5524 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -29,10 +29,11 @@ msgstr "Este activ" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" -"Dacă este setat la false, acest obiect nu poate fi văzut de utilizatori fără " -"permisiunea necesară" +"Dacă este setat la false, acest obiect nu poate fi văzut de utilizatori fără" +" permisiunea necesară" #: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" @@ -50,89 +51,89 @@ msgstr "Modificat" msgid "when the object was last modified" msgstr "Când a fost editat obiectul ultima dată" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Traduceri" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Generalități" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relații" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "informații suplimentare" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadate" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Timestamps" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activați %(verbose_name_plural)s selectat" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Articolele selectate au fost activate!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Dezactivați %(verbose_name_plural)s selectat" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Articolele selectate au fost dezactivate!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Atribut Valoare" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Valori ale atributului" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Imagine" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Imagini" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stoc" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocuri" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Comanda Produs" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Comandați produse" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Copii" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Configurare" @@ -156,7 +157,8 @@ msgstr "Livrat" msgid "canceled" msgstr "Anulată" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Eșuat" @@ -194,11 +196,11 @@ msgid "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." msgstr "" -"Schema OpenApi3 pentru acest API. Formatul poate fi selectat prin negocierea " -"conținutului. Limba poate fi selectată atât cu Accept-Language, cât și cu " +"Schema OpenApi3 pentru acest API. Formatul poate fi selectat prin negocierea" +" conținutului. Limba poate fi selectată atât cu Accept-Language, cât și cu " "parametrul de interogare." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -208,8 +210,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Aplicați doar o cheie pentru a citi datele permise din cache.\n" -"Aplicați o cheie, date și timeout cu autentificare pentru a scrie date în " -"cache." +"Aplicați o cheie, date și timeout cu autentificare pentru a scrie date în cache." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -223,7 +224,7 @@ msgstr "Obțineți parametrii expunibili ai aplicației" msgid "send a message to the support team" msgstr "Trimiteți un mesaj echipei de asistență" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Solicitați un URL CORSed. Numai https este permis." @@ -234,8 +235,8 @@ msgstr "Căutare între produse, categorii și mărci" #: engine/core/docs/drf/views.py:130 msgid "global search endpoint to query across project's tables" msgstr "" -"Punct final de căutare globală pentru a efectua interogări în toate tabelele " -"proiectului" +"Punct final de căutare globală pentru a efectua interogări în toate tabelele" +" proiectului" #: engine/core/docs/drf/views.py:139 msgid "purchase an order as a business" @@ -246,8 +247,8 @@ msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -"Achiziționați o comandă ca o afacere, utilizând `products` cu `product_uuid` " -"și `attributes` furnizate." +"Achiziționați o comandă ca o afacere, utilizând `products` cu `product_uuid`" +" și `attributes` furnizate." #: engine/core/docs/drf/views.py:164 msgid "download a digital asset from purchased digital order" @@ -272,10 +273,12 @@ msgstr "Ștergerea unui grup de atribute" #: engine/core/docs/drf/viewsets.py:89 msgid "rewrite an existing attribute group saving non-editables" msgstr "" -"Rescrierea unui grup de atribute existent cu salvarea elementelor needitabile" +"Rescrierea unui grup de atribute existent cu salvarea elementelor " +"needitabile" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Rescrierea unor câmpuri ale unui grup de atribute existent, cu salvarea " "elementelor needitabile" @@ -328,7 +331,8 @@ msgstr "" "Rescrierea unei valori de atribut existente care salvează non-editabile" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Rescrierea unor câmpuri ale unei valori de atribut existente salvând " "elementele needitabile" @@ -365,9 +369,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -387,8 +391,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Căutare de substring insensibilă la majuscule în human_readable_id, " "order_products.product.name și order_products.product.partnumber" @@ -427,9 +431,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Ordonați după unul dintre: uuid, human_readable_id, user_email, user, " "status, created, modified, buy_time, random. Prefixați cu \"-\" pentru " @@ -488,7 +492,7 @@ msgid "retrieves a current pending order of an authenticated user" msgstr "" "recuperează o comandă curentă în așteptare a unui utilizator autentificat" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "achiziționarea unei comenzi fără crearea unui cont" @@ -634,29 +638,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrați după una sau mai multe perechi nume de atribut/valoare. \n" "- **Sintaxa**: `attr_name=method-value[;attr2=method2-value2]...`\n" -"- **Metode** (valoarea implicită este `icontains` dacă este omisă): " -"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, " -"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, " -"`gt`, `gte`, `in`\n" -"- **Value typing**: JSON este încercat în primul rând (astfel încât să " -"puteți trece liste/dicte), `true`/`false` pentru booleeni, întregi, float; " -"în caz contrar tratat ca string. \n" -"- **Base64**: prefix cu `b64-` pentru a codifica valoarea brută în baza64 în " -"condiții de siguranță URL. \n" +"- **Metode** (valoarea implicită este `icontains` dacă este omisă): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- **Value typing**: JSON este încercat în primul rând (astfel încât să puteți trece liste/dicte), `true`/`false` pentru booleeni, întregi, float; în caz contrar tratat ca string. \n" +"- **Base64**: prefix cu `b64-` pentru a codifica valoarea brută în baza64 în condiții de siguranță URL. \n" "Exemple: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -671,12 +664,10 @@ msgstr "(exact) UUID al produsului" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Lista de câmpuri separate prin virgulă după care se face sortarea. Prefixați " -"cu `-` pentru descrescător. \n" +"Lista de câmpuri separate prin virgulă după care se face sortarea. Prefixați cu `-` pentru descrescător. \n" "**Autorizate:** uuid, rating, nume, slug, creat, modificat, preț, aleatoriu" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -690,6 +681,9 @@ msgid "Product UUID or slug" msgstr "UUID sau Slug al produsului" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Creați un produs" @@ -748,8 +742,8 @@ msgstr "Autocompletare adresă de intrare" #: engine/core/docs/drf/viewsets.py:794 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -"docker compose exec app poetry run python manage.py deepl_translate -l en-gb " -"-l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " +"docker compose exec app poetry run python manage.py deepl_translate -l en-gb" +" -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " "it-it -l ja-jp -l kk-kz -l nl-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-" "hans -a core -a geo -a plăți -a vibes_auth -a blog" @@ -833,7 +827,8 @@ msgstr "Ștergeți un brand" #: engine/core/docs/drf/viewsets.py:974 msgid "rewrite an existing brand saving non-editables" -msgstr "Rescrierea unui brand existent care economisește materiale needitabile" +msgstr "" +"Rescrierea unui brand existent care economisește materiale needitabile" #: engine/core/docs/drf/viewsets.py:981 msgid "rewrite some fields of an existing brand saving non-editables" @@ -885,7 +880,8 @@ msgstr "Ștergeți imaginea unui produs" #: engine/core/docs/drf/viewsets.py:1079 msgid "rewrite an existing product image saving non-editables" -msgstr "Rescrieți o imagine de produs existentă salvând elementele needitabile" +msgstr "" +"Rescrieți o imagine de produs existentă salvând elementele needitabile" #: engine/core/docs/drf/viewsets.py:1086 msgid "rewrite some fields of an existing product image saving non-editables" @@ -937,7 +933,8 @@ msgstr "Ștergeți o promovare" #: engine/core/docs/drf/viewsets.py:1169 msgid "rewrite an existing promotion saving non-editables" -msgstr "Rescrierea unei promoții existente cu salvarea elementelor needitabile" +msgstr "" +"Rescrierea unei promoții existente cu salvarea elementelor needitabile" #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" @@ -1129,251 +1126,252 @@ msgstr "Nivel" msgid "Product UUID" msgstr "UUID produs" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Cheie care trebuie căutată sau introdusă în cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Date de stocat în cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout în secunde pentru a seta datele în cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Date în cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Date JSON Camelizate de la URL-ul solicitat" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Sunt permise numai URL-urile care încep cu http(s)://" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Adăugați un produs la comandă" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Comanda {order_uuid} nu a fost găsită!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Eliminați toate produsele din comandă" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Cumpărați o comandă" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Efectuați o acțiune asupra unei liste de produse din comandă" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Eliminare/adăugare" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Acțiunea trebuie să fie fie \"adăugare\" sau \"eliminare\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Efectuați o acțiune pe o listă de produse din lista de dorințe" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Vă rugăm să furnizați valoarea `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nu a fost găsit!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Adăugați un produs la comandă" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Cumpărați o comandă" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Vă rugăm să trimiteți atributele sub formă de șir format ca attr1=valoare1, " "attr2=valoare2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Adăugați sau ștergeți un feedback pentru comandaprodus" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Acțiunea trebuie să fie `add` sau `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Comandaprodus {order_product_uuid} nu a fost găsită!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Șirul de adrese original furnizat de utilizator" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Limita trebuie să fie între 1 și 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funcționează ca un farmec" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Atribute" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atribute grupate" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupuri de atribute" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Categorii" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Mărci" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorii" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procentul de majorare" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Atributele și valorile care pot fi utilizate pentru filtrarea acestei " "categorii." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" -"Prețurile minime și maxime pentru produsele din această categorie, dacă sunt " -"disponibile." +"Prețurile minime și maxime pentru produsele din această categorie, dacă sunt" +" disponibile." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Etichete pentru această categorie" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produse din această categorie" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Furnizori" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitudine (coordonata Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitudine (coordonata X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Cum să" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valoare nominală de la 1 la 10, inclusiv, sau 0 dacă nu este setată." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Reprezintă feedback de la un utilizator." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Notificări" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL de descărcare pentru acest produs de comandă, dacă este cazul" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "O listă a produselor comandate în această comandă" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Adresa de facturare" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1381,53 +1379,53 @@ msgstr "" "Adresa de expediere pentru această comandă, lăsați în alb dacă este aceeași " "cu adresa de facturare sau dacă nu se aplică" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Prețul total al acestei comenzi" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Cantitatea totală de produse din comandă" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Sunt toate produsele din comanda digitală" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Tranzacții pentru această comandă" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Ordine" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL imagine" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Imagini ale produsului" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Categorie" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Feedback-uri" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Marca" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupuri de atribute" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1435,7 +1433,7 @@ msgstr "Grupuri de atribute" msgid "price" msgstr "Preț" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1443,39 +1441,39 @@ msgstr "Preț" msgid "quantity" msgstr "Cantitate" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Numărul de reacții" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produse disponibile numai pentru comenzi personale" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Preț redus" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produse" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Coduri promoționale" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produse scoase la vânzare" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promoții" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Furnizor" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1483,100 +1481,100 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Produse dorite" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Liste de dorințe" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produse etichetate" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Etichete de produs" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Categorii etichetate" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Etichete \"Categorii" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Numele proiectului" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Numele companiei" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Adresa companiei" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Numărul de telefon al companiei" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "\"e-mail de la\", uneori trebuie să fie utilizat în locul valorii " "utilizatorului gazdă" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Utilizator gazdă e-mail" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Suma maximă pentru plată" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Suma minimă pentru plată" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Date analitice" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Date publicitare" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Configurație" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Codul limbii" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Numele limbii" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Indicatorul de limbă, dacă există :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Obțineți o listă a limbilor acceptate" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Rezultate căutare produse" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Rezultate căutare produse" @@ -1589,8 +1587,8 @@ msgid "" msgstr "" "Reprezintă un grup de atribute, care poate fi ierarhic. Această clasă este " "utilizată pentru gestionarea și organizarea grupurilor de atribute. Un grup " -"de atribute poate avea un grup părinte, formând o structură ierarhică. Acest " -"lucru poate fi util pentru clasificarea și gestionarea mai eficientă a " +"de atribute poate avea un grup părinte, formând o structură ierarhică. Acest" +" lucru poate fi util pentru clasificarea și gestionarea mai eficientă a " "atributelor în cadrul unui sistem complex." #: engine/core/models.py:91 @@ -1714,8 +1712,8 @@ msgid "" msgstr "" "Reprezintă o etichetă de categorie utilizată pentru produse. Această clasă " "modelează o etichetă de categorie care poate fi utilizată pentru asocierea " -"și clasificarea produselor. Aceasta include atribute pentru un identificator " -"intern al etichetei și un nume de afișare ușor de utilizat." +"și clasificarea produselor. Aceasta include atribute pentru un identificator" +" intern al etichetei și un nume de afișare ușor de utilizat." #: engine/core/models.py:254 msgid "category tag" @@ -1743,9 +1741,9 @@ msgstr "" "include câmpuri pentru metadate și reprezentare vizuală, care servesc drept " "bază pentru caracteristicile legate de categorie. Această clasă este " "utilizată de obicei pentru a defini și gestiona categoriile de produse sau " -"alte grupări similare în cadrul unei aplicații, permițând utilizatorilor sau " -"administratorilor să specifice numele, descrierea și ierarhia categoriilor, " -"precum și să atribuie atribute precum imagini, etichete sau prioritate." +"alte grupări similare în cadrul unei aplicații, permițând utilizatorilor sau" +" administratorilor să specifice numele, descrierea și ierarhia categoriilor," +" precum și să atribuie atribute precum imagini, etichete sau prioritate." #: engine/core/models.py:274 msgid "upload an image representing this category" @@ -1757,7 +1755,8 @@ msgstr "Categorie imagine" #: engine/core/models.py:282 msgid "define a markup percentage for products in this category" -msgstr "Definiți un procent de majorare pentru produsele din această categorie" +msgstr "" +"Definiți un procent de majorare pentru produsele din această categorie" #: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" @@ -1796,10 +1795,11 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"Reprezintă un obiect Brand în sistem. Această clasă gestionează informațiile " -"și atributele legate de o marcă, inclusiv numele acesteia, logo-urile, " +"Reprezintă un obiect Brand în sistem. Această clasă gestionează informațiile" +" și atributele legate de o marcă, inclusiv numele acesteia, logo-urile, " "descrierea, categoriile asociate, un slug unic și ordinea de prioritate. " "Aceasta permite organizarea și reprezentarea datelor legate de marcă în " "cadrul aplicației." @@ -1846,8 +1846,8 @@ msgstr "Categorii" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1936,14 +1936,14 @@ msgid "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." msgstr "" -"Reprezintă un produs cu atribute precum categoria, marca, etichetele, starea " -"digitală, numele, descrierea, numărul piesei și slug-ul. Oferă proprietăți " +"Reprezintă un produs cu atribute precum categoria, marca, etichetele, starea" +" digitală, numele, descrierea, numărul piesei și slug-ul. Oferă proprietăți " "utilitare conexe pentru a prelua evaluări, numărul de comentarii, prețul, " "cantitatea și comenzile totale. Concepută pentru a fi utilizată într-un " "sistem care gestionează comerțul electronic sau inventarul. Această clasă " "interacționează cu modele conexe (cum ar fi Category, Brand și ProductTag) " -"și gestionează memoria cache pentru proprietățile accesate frecvent pentru a " -"îmbunătăți performanța. Este utilizată pentru a defini și manipula datele " +"și gestionează memoria cache pentru proprietățile accesate frecvent pentru a" +" îmbunătăți performanța. Este utilizată pentru a defini și manipula datele " "despre produse și informațiile asociate acestora în cadrul unei aplicații." #: engine/core/models.py:585 @@ -1999,16 +1999,16 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Reprezintă un atribut în sistem. Această clasă este utilizată pentru " "definirea și gestionarea atributelor, care sunt elemente de date " "personalizabile care pot fi asociate cu alte entități. Atributele au " "asociate categorii, grupuri, tipuri de valori și nume. Modelul acceptă mai " -"multe tipuri de valori, inclusiv șir, număr întreg, float, boolean, array și " -"obiect. Acest lucru permite structurarea dinamică și flexibilă a datelor." +"multe tipuri de valori, inclusiv șir, număr întreg, float, boolean, array și" +" obiect. Acest lucru permite structurarea dinamică și flexibilă a datelor." #: engine/core/models.py:733 msgid "group of this attribute" @@ -2071,9 +2071,9 @@ msgstr "Atribut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Reprezintă o valoare specifică pentru un atribut care este legat de un " "produs. Leagă \"atributul\" de o \"valoare\" unică, permițând o mai bună " @@ -2094,8 +2094,8 @@ msgstr "Valoarea specifică pentru acest atribut" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2144,8 +2144,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Reprezintă o campanie promoțională pentru produse cu o reducere. Această " "clasă este utilizată pentru a defini și gestiona campanii promoționale care " @@ -2193,9 +2193,9 @@ msgid "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." msgstr "" -"Reprezintă lista de dorințe a unui utilizator pentru stocarea și gestionarea " -"produselor dorite. Clasa oferă funcționalitatea de a gestiona o colecție de " -"produse, suportând operațiuni precum adăugarea și eliminarea de produse, " +"Reprezintă lista de dorințe a unui utilizator pentru stocarea și gestionarea" +" produselor dorite. Clasa oferă funcționalitatea de a gestiona o colecție de" +" produse, suportând operațiuni precum adăugarea și eliminarea de produse, " "precum și operațiuni pentru adăugarea și eliminarea mai multor produse " "simultan." @@ -2221,8 +2221,8 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Reprezintă o înregistrare documentară legată de un produs. Această clasă " "este utilizată pentru a stoca informații despre documentarele legate de " @@ -2246,14 +2246,14 @@ msgstr "Nerezolvat" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Reprezintă o entitate de adresă care include detalii despre locație și " "asocieri cu un utilizator. Oferă funcționalitate pentru stocarea datelor " @@ -2263,7 +2263,8 @@ msgstr "" "geolocalizarea (longitudine și latitudine). Aceasta suportă integrarea cu " "API-urile de geocodare, permițând stocarea răspunsurilor API brute pentru " "procesare sau inspecție ulterioară. De asemenea, clasa permite asocierea " -"unei adrese cu un utilizator, facilitând gestionarea personalizată a datelor." +"unei adrese cu un utilizator, facilitând gestionarea personalizată a " +"datelor." #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2331,8 +2332,8 @@ msgstr "" "PromoCode stochează detalii despre un cod promoțional, inclusiv " "identificatorul său unic, proprietățile de reducere (sumă sau procent), " "perioada de valabilitate, utilizatorul asociat (dacă există) și starea " -"utilizării acestuia. Aceasta include funcționalități de validare și aplicare " -"a codului promoțional la o comandă, asigurându-se în același timp că sunt " +"utilizării acestuia. Aceasta include funcționalități de validare și aplicare" +" a codului promoțional la o comandă, asigurându-se în același timp că sunt " "respectate constrângerile." #: engine/core/models.py:1087 @@ -2422,17 +2423,17 @@ msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "Reprezintă o comandă plasată de un utilizator. Această clasă modelează o " "comandă în cadrul aplicației, inclusiv diferitele sale atribute, cum ar fi " -"informațiile privind facturarea și expedierea, starea, utilizatorul asociat, " -"notificările și operațiunile conexe. Comenzile pot avea produse asociate, se " -"pot aplica promoții, se pot stabili adrese și se pot actualiza detaliile de " -"expediere sau de facturare. În egală măsură, funcționalitatea sprijină " +"informațiile privind facturarea și expedierea, starea, utilizatorul asociat," +" notificările și operațiunile conexe. Comenzile pot avea produse asociate, " +"se pot aplica promoții, se pot stabili adrese și se pot actualiza detaliile " +"de expediere sau de facturare. În egală măsură, funcționalitatea sprijină " "gestionarea produselor în ciclul de viață al comenzii." #: engine/core/models.py:1213 @@ -2582,7 +2583,8 @@ msgstr "" msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -"Metodă de plată invalidă: {payment_method} de la {available_payment_methods}!" +"Metodă de plată invalidă: {payment_method} de la " +"{available_payment_methods}!" #: engine/core/models.py:1699 msgid "" @@ -2609,10 +2611,11 @@ msgid "feedback comments" msgstr "Comentarii de feedback" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +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" +"Face referire la produsul specific dintr-o comandă despre care este vorba în" +" acest feedback" #: engine/core/models.py:1720 msgid "related order product" @@ -2640,8 +2643,8 @@ msgid "" msgstr "" "Reprezintă produsele asociate comenzilor și atributele acestora. Modelul " "OrderProduct păstrează informații despre un produs care face parte dintr-o " -"comandă, inclusiv detalii precum prețul de achiziție, cantitatea, atributele " -"produsului și starea acestuia. Acesta gestionează notificările pentru " +"comandă, inclusiv detalii precum prețul de achiziție, cantitatea, atributele" +" produsului și starea acestuia. Acesta gestionează notificările pentru " "utilizator și administratori și se ocupă de operațiuni precum returnarea " "soldului produsului sau adăugarea de feedback. Acest model oferă, de " "asemenea, metode și proprietăți care susțin logica de afaceri, cum ar fi " @@ -2757,17 +2760,17 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Reprezintă funcționalitatea de descărcare pentru activele digitale asociate " "comenzilor. Clasa DigitalAssetDownload oferă posibilitatea de a gestiona și " "de a accesa descărcările legate de produsele de comandă. Aceasta păstrează " -"informații despre produsul de comandă asociat, numărul de descărcări și dacă " -"activul este vizibil public. Aceasta include o metodă de generare a unei " -"adrese URL pentru descărcarea activului atunci când comanda asociată este în " -"stare finalizată." +"informații despre produsul de comandă asociat, numărul de descărcări și dacă" +" activul este vizibil public. Aceasta include o metodă de generare a unei " +"adrese URL pentru descărcarea activului atunci când comanda asociată este în" +" stare finalizată." #: engine/core/models.py:1961 msgid "download" @@ -2781,8 +2784,8 @@ msgstr "Descărcări" msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -"trebuie să furnizați un comentariu, un rating și uuid-ul produsului comandat " -"pentru a adăuga feedback." +"trebuie să furnizați un comentariu, un rating și uuid-ul produsului comandat" +" pentru a adăuga feedback." #: engine/core/sitemaps.py:25 msgid "Home" @@ -2825,8 +2828,7 @@ msgstr "Bună ziua %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Vă mulțumim pentru comanda dvs. #%(order.pk)s! Suntem încântați să vă " @@ -2941,12 +2943,11 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" -"Vă mulțumim pentru comanda dvs.! Suntem încântați să vă confirmăm achiziția. " -"Mai jos sunt detaliile comenzii dvs:" +"Vă mulțumim pentru comanda dvs.! Suntem încântați să vă confirmăm achiziția." +" Mai jos sunt detaliile comenzii dvs:" #: engine/core/templates/shipped_order_created_email.html:123 #: engine/core/templates/shipped_order_delivered_email.html:123 @@ -2983,23 +2984,23 @@ msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | contactați-ne inițiat" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contactați-ne inițiat" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmarea comenzii" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmarea comenzii" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Livrarea comenzii" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | comandă livrată" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode acordat" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode acordat" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3031,8 +3032,8 @@ msgid "" "Content-Type header for XML." msgstr "" "Gestionează răspunsul de vizualizare detaliată pentru o hartă a site-ului. " -"Această funcție procesează cererea, extrage răspunsul detaliat corespunzător " -"al hărții site-ului și stabilește antetul Content-Type pentru XML." +"Această funcție procesează cererea, extrage răspunsul detaliat corespunzător" +" al hărții site-ului și stabilește antetul Content-Type pentru XML." #: engine/core/views.py:123 msgid "" @@ -3049,8 +3050,8 @@ msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -"Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din " -"cache cu o cheie și un timeout specificate." +"Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din" +" cache cu o cheie și un timeout specificate." #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -3061,8 +3062,8 @@ msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -"Gestionează cererile de procesare și validare a URL-urilor din cererile POST " -"primite." +"Gestionează cererile de procesare și validare a URL-urilor din cererile POST" +" primite." #: engine/core/views.py:262 msgid "Handles global search queries." @@ -3075,15 +3076,10 @@ msgstr "Gestionează logica cumpărării ca o afacere fără înregistrare." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gestionează descărcarea unui bun digital asociat cu o comandă.\n" -"Această funcție încearcă să servească fișierul activului digital situat în " -"directorul de stocare al proiectului. Dacă fișierul nu este găsit, este " -"generată o eroare HTTP 404 pentru a indica faptul că resursa nu este " -"disponibilă." +"Această funcție încearcă să servească fișierul activului digital situat în directorul de stocare al proiectului. Dacă fișierul nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3112,31 +3108,27 @@ msgstr "favicon nu a fost găsit" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Gestionează cererile pentru favicon-ul unui site web.\n" -"Această funcție încearcă să servească fișierul favicon situat în directorul " -"static al proiectului. Dacă fișierul favicon nu este găsit, este generată o " -"eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." +"Această funcție încearcă să servească fișierul favicon situat în directorul static al proiectului. Dacă fișierul favicon nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Redirecționează solicitarea către pagina de index a administratorului. " -"Funcția gestionează cererile HTTP primite și le redirecționează către pagina " -"index a interfeței de administrare Django. Aceasta utilizează funcția " +"Funcția gestionează cererile HTTP primite și le redirecționează către pagina" +" index a interfeței de administrare Django. Aceasta utilizează funcția " "`redirect` din Django pentru gestionarea redirecționării HTTP." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "Returnează versiunea curentă a eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3151,12 +3143,13 @@ msgstr "" "dinamice în funcție de acțiunea curentă, permisiuni personalizabile și " "formate de redare." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Reprezintă un set de vizualizări pentru gestionarea obiectelor " "AttributeGroup. Gestionează operațiunile legate de AttributeGroup, inclusiv " @@ -3164,7 +3157,7 @@ msgstr "" "stratul API al aplicației și oferă o modalitate standardizată de a procesa " "cererile și răspunsurile pentru datele AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3173,20 +3166,20 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"Gestionează operațiunile legate de obiectele Attribute în cadrul aplicației. " -"Oferă un set de puncte finale API pentru a interacționa cu datele Attribute. " -"Această clasă gestionează interogarea, filtrarea și serializarea obiectelor " -"Attribute, permițând controlul dinamic asupra datelor returnate, cum ar fi " -"filtrarea după câmpuri specifice sau recuperarea de informații detaliate sau " -"simplificate în funcție de cerere." +"Gestionează operațiunile legate de obiectele Attribute în cadrul aplicației." +" Oferă un set de puncte finale API pentru a interacționa cu datele " +"Attribute. Această clasă gestionează interogarea, filtrarea și serializarea " +"obiectelor Attribute, permițând controlul dinamic asupra datelor returnate, " +"cum ar fi filtrarea după câmpuri specifice sau recuperarea de informații " +"detaliate sau simplificate în funcție de cerere." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Un set de vizualizări pentru gestionarea obiectelor AttributeValue. Acest " "set de vizualizări oferă funcționalități pentru listarea, extragerea, " @@ -3195,7 +3188,7 @@ msgstr "" "serializatoare adecvate pentru diferite acțiuni. Capacitățile de filtrare " "sunt furnizate prin DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3210,7 +3203,7 @@ msgstr "" "permisiuni pentru a se asigura că numai utilizatorii autorizați pot accesa " "date specifice." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3222,7 +3215,7 @@ msgstr "" "serializarea obiectelor Brand. Utilizează cadrul ViewSet al Django pentru a " "simplifica implementarea punctelor finale API pentru obiectele Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3234,13 +3227,13 @@ msgid "" msgstr "" "Gestionează operațiunile legate de modelul `Product` din sistem. Această " "clasă oferă un set de vizualizări pentru gestionarea produselor, inclusiv " -"filtrarea lor, serializarea și operațiunile asupra instanțelor specifice. Se " -"extinde de la `EvibesViewSet` pentru a utiliza funcționalități comune și se " -"integrează cu cadrul REST Django pentru operațiuni API RESTful. Include " +"filtrarea lor, serializarea și operațiunile asupra instanțelor specifice. Se" +" extinde de la `EvibesViewSet` pentru a utiliza funcționalități comune și se" +" integrează cu cadrul REST Django pentru operațiuni API RESTful. Include " "metode pentru recuperarea detaliilor produsului, aplicarea permisiunilor și " "accesarea feedback-ului aferent unui produs." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3248,38 +3241,38 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"Reprezintă un set de vizualizări pentru gestionarea obiectelor Vendor. Acest " -"set de vizualizare permite preluarea, filtrarea și serializarea datelor " +"Reprezintă un set de vizualizări pentru gestionarea obiectelor Vendor. Acest" +" set de vizualizare permite preluarea, filtrarea și serializarea datelor " "furnizorului. Aceasta definește queryset-ul, configurațiile de filtrare și " "clasele de serializare utilizate pentru a gestiona diferite acțiuni. Scopul " "acestei clase este de a oferi acces simplificat la resursele legate de " "Vendor prin intermediul cadrului REST Django." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Reprezentarea unui set de vizualizări care gestionează obiecte Feedback. " "Această clasă gestionează operațiunile legate de obiectele Feedback, " -"inclusiv listarea, filtrarea și extragerea detaliilor. Scopul acestui set de " -"vizualizări este de a furniza serializatoare diferite pentru acțiuni " +"inclusiv listarea, filtrarea și extragerea detaliilor. Scopul acestui set de" +" vizualizări este de a furniza serializatoare diferite pentru acțiuni " "diferite și de a implementa gestionarea pe bază de permisiuni a obiectelor " "Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și " "utilizează sistemul de filtrare Django pentru interogarea datelor." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet pentru gestionarea comenzilor și a operațiunilor conexe. Această " @@ -3292,12 +3285,12 @@ msgstr "" "de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " "timpul interacțiunii cu datele comenzii." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Oferă un set de vizualizări pentru gestionarea entităților OrderProduct. " @@ -3307,11 +3300,12 @@ msgstr "" "solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" "ului privind instanțele OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " -msgstr "Gestionează operațiunile legate de imaginile produselor din aplicație." +msgstr "" +"Gestionează operațiunile legate de imaginile produselor din aplicație." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3319,21 +3313,21 @@ msgstr "" "Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " "acțiuni API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestionează operațiunile legate de datele privind stocurile din sistem." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3347,7 +3341,7 @@ msgstr "" "utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " "cazului în care sunt acordate permisiuni explicite." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3356,18 +3350,18 @@ msgid "" "on the request context." msgstr "" "Această clasă oferă funcționalități de tip viewset pentru gestionarea " -"obiectelor `Address`. Clasa AddressViewSet permite operațiuni CRUD, filtrare " -"și acțiuni personalizate legate de entitățile adresă. Aceasta include " +"obiectelor `Address`. Clasa AddressViewSet permite operațiuni CRUD, filtrare" +" și acțiuni personalizate legate de entitățile adresă. Aceasta include " "comportamente specializate pentru diferite metode HTTP, înlocuiri ale " "serializatorului și gestionarea permisiunilor în funcție de contextul " "cererii." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.mo b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo index ad634f177bd1d789b3cb3910671cb5cf4b88c431..2206585ac9119d9cec5b56de326a5b889d24dd83 100644 GIT binary patch delta 5500 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 delta 5425 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Активен" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Если установлено значение false, этот объект не может быть виден " "пользователям без необходимого разрешения" @@ -50,89 +51,89 @@ msgstr "Модифицированный" msgid "when the object was last modified" msgstr "Когда объект был отредактирован в последний раз" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Переводы" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Общие сведения" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Отношения" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "дополнительная информация" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Метаданные" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Временные метки" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Активировать выбранный %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Выбранные сущности активированы!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Деактивировать выбранный %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Выбранные сущности были деактивированы!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Значение атрибута" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Значения атрибутов" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Изображение" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Изображения" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Наличие" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Наличия" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Заказанный товар" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Заказанные товары" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Дети" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Конфигурация" @@ -156,7 +157,8 @@ msgstr "Доставлено" msgid "canceled" msgstr "Отменено" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Не удалось" @@ -198,7 +200,7 @@ msgstr "" "содержимого. Язык может быть выбран с помощью Accept-Language и параметра " "запроса." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Ввод/вывод кэша" @@ -222,7 +224,7 @@ msgstr "Получите параметры приложения, которые msgid "send a message to the support team" msgstr "Отправьте сообщение в службу поддержки" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Запросите URL-адрес с поддержкой CORS. Допускается только https." @@ -274,7 +276,8 @@ msgstr "" "элементов" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Переписывание некоторых полей существующей группы атрибутов с сохранением " "нередактируемых полей" @@ -328,7 +331,8 @@ msgstr "" "значений" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Переписывание некоторых полей существующего значения атрибута с сохранением " "нередактируемых значений" @@ -366,9 +370,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Мета-данные для SEO" @@ -388,11 +392,11 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"Поиск подстроки с учетом регистра в human_readable_id, order_products." -"product.name и order_products.product.partnumber" +"Поиск подстроки с учетом регистра в human_readable_id, " +"order_products.product.name и order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -428,9 +432,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Упорядочивайте по одному из следующих признаков: uuid, human_readable_id, " "user_email, user, status, created, modified, buy_time, random. Префикс '-' " @@ -489,7 +493,7 @@ msgstr "получить текущий отложенный ордер поль msgid "retrieves a current pending order of an authenticated user" msgstr "извлекает текущий отложенный заказ аутентифицированного пользователя" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "приобретение заказа без создания учетной записи" @@ -518,8 +522,8 @@ msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -"Добавляет список товаров в заказ, используя предоставленные `product_uuid` и " -"`attributes`." +"Добавляет список товаров в заказ, используя предоставленные `product_uuid` и" +" `attributes`." #: engine/core/docs/drf/viewsets.py:438 msgid "remove product from order" @@ -542,8 +546,8 @@ msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "" -"Удаляет список товаров из заказа, используя предоставленные `product_uuid` и " -"`attributes`." +"Удаляет список товаров из заказа, используя предоставленные `product_uuid` и" +" `attributes`." #: engine/core/docs/drf/viewsets.py:459 msgid "list all wishlists (simple view)" @@ -633,29 +637,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Фильтр по одной или нескольким парам имя/значение атрибута. \n" "- **Синтаксис**: `attr_name=method-value[;attr2=method2-value2]...`.\n" -"- **Методы** (по умолчанию используется `icontains`, если опущено): " -"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, " -"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, " -"`gt`, `gte`, `in`.\n" -"- **Типизация значений**: JSON сначала пытается принять значение (так что вы " -"можете передавать списки/дискреты), `true`/`false` для булевых, целых чисел, " -"плавающих; в противном случае обрабатывается как строка. \n" -"- **Base64**: префикс `b64-` для безопасного для URL base64-кодирования " -"исходного значения. \n" +"- **Методы** (по умолчанию используется `icontains`, если опущено): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n" +"- **Типизация значений**: JSON сначала пытается принять значение (так что вы можете передавать списки/дискреты), `true`/`false` для булевых, целых чисел, плавающих; в противном случае обрабатывается как строка. \n" +"- **Base64**: префикс `b64-` для безопасного для URL base64-кодирования исходного значения. \n" "Примеры: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." @@ -670,14 +663,11 @@ msgstr "(точный) UUID продукта" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Список полей для сортировки, разделенных запятыми. Для сортировки по " -"убыванию используйте префикс `-`. \n" -"**Разрешенные:** uuid, рейтинг, название, slug, created, modified, price, " -"random" +"Список полей для сортировки, разделенных запятыми. Для сортировки по убыванию используйте префикс `-`. \n" +"**Разрешенные:** uuid, рейтинг, название, slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -690,6 +680,9 @@ msgid "Product UUID or slug" msgstr "UUID или Slug продукта" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Создать продукт" @@ -1132,252 +1125,253 @@ msgstr "Уровень" msgid "Product UUID" msgstr "UUID продукта" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Ключ, который нужно найти в тайнике или вложить в него" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Данные для хранения в кэше" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Тайм-аут в секундах для занесения данных в кэш" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Кэшированные данные" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-данные из запрашиваемого URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Добавить товар в заказ" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Заказ {order_uuid} не найден!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Удалить все товары из заказа" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Купить заказ" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Пожалуйста, укажите либо order_uuid, либо order_hr_id - взаимоисключающие " "варианты!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Выполните действие над списком товаров в заказе" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Удалить/добавить" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Действие должно быть либо \"добавить\", либо \"удалить\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Выполните действие над списком продуктов в списке желаний" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Пожалуйста, укажите значение `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Список желаний {wishlist_uuid} не найден!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Добавить товар в заказ" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Купить заказ" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Пожалуйста, отправьте атрибуты в виде строки, отформатированной как " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Добавить или удалить отзыв для продукта заказа" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Действие должно быть либо `add`, либо `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Заказ товара {order_product_uuid} не найден!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Предел должен быть от 1 до 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - работает как шарм" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Атрибуты" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Сгруппированные атрибуты" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Группы атрибутов" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Категории" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Бренды" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Категории" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Процент наценки" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Минимальные и максимальные цены на товары в этой категории, если они " "доступны." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Теги для этой категории" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Продукты в этой категории" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Поставщики" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Широта (координата Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Долгота (координата X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Как" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Значение рейтинга от 1 до 10, включительно, или 0, если он не установлен." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Уведомления" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Если применимо, загрузите url для этого продукта заказа" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Обратная связь" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Адрес для выставления счетов" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1385,53 +1379,53 @@ msgstr "" "Адрес доставки для данного заказа, оставьте пустым, если он совпадает с " "адресом выставления счета или не применяется" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Общая стоимость этого заказа" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Общее количество продуктов в заказе" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Все ли товары в заказе представлены в цифровом виде" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Операции для этого заказа" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Заказы" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL-адрес изображения" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Изображения товара" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Категория" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Отзывы" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Бренд" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Группы атрибутов" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1439,7 +1433,7 @@ msgstr "Группы атрибутов" msgid "price" msgstr "Цена" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1447,39 +1441,39 @@ msgstr "Цена" msgid "quantity" msgstr "Количество" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Количество отзывов" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Продукты доступны только для личных заказов" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Цена со скидкой" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Товары" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Промокоды" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Продукты в продаже" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Промоакции" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Поставщик" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1487,100 +1481,100 @@ msgstr "Поставщик" msgid "product" msgstr "Товар" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Списки желаний" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Tagged products" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Теги товара" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Категории с метками" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Теги категорий" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Название проекта" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Название компании" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Адрес компании" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Номер телефона компании" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', иногда его нужно использовать вместо значения пользователя " "хоста." -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Пользователь узла электронной почты" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Максимальная сумма для оплаты" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Минимальная сумма для оплаты" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Аналитические данные" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Рекламные данные" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Конфигурация" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Код языка" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Название языка" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Языковой флаг, если он существует :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Получите список поддерживаемых языков" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Результаты поиска товаров" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Результаты поиска товаров" @@ -1635,8 +1629,8 @@ msgstr "" #: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -"Хранит учетные данные и конечные точки, необходимые для взаимодействия с API " -"поставщика." +"Хранит учетные данные и конечные точки, необходимые для взаимодействия с API" +" поставщика." #: engine/core/models.py:125 msgid "authentication info" @@ -1684,8 +1678,8 @@ msgid "" msgstr "" "Представляет тег продукта, используемый для классификации или идентификации " "продуктов. Класс ProductTag предназначен для уникальной идентификации и " -"классификации продуктов с помощью комбинации внутреннего идентификатора тега " -"и удобного для пользователя отображаемого имени. Он поддерживает операции, " +"классификации продуктов с помощью комбинации внутреннего идентификатора тега" +" и удобного для пользователя отображаемого имени. Он поддерживает операции, " "экспортируемые через миксины, и обеспечивает настройку метаданных для " "административных целей." @@ -1717,8 +1711,8 @@ msgid "" msgstr "" "Представляет тег категории, используемый для продуктов. Этот класс " "моделирует тег категории, который может быть использован для ассоциации и " -"классификации продуктов. Он включает атрибуты для внутреннего идентификатора " -"тега и удобного для пользователя отображаемого имени." +"классификации продуктов. Он включает атрибуты для внутреннего идентификатора" +" тега и удобного для пользователя отображаемого имени." #: engine/core/models.py:254 msgid "category tag" @@ -1742,8 +1736,8 @@ msgid "" msgstr "" "Представляет собой объект категории для организации и группировки связанных " "элементов в иерархическую структуру. Категории могут иметь иерархические " -"отношения с другими категориями, поддерживая отношения \"родитель-ребенок\". " -"Класс включает поля для метаданных и визуального представления, которые " +"отношения с другими категориями, поддерживая отношения \"родитель-ребенок\"." +" Класс включает поля для метаданных и визуального представления, которые " "служат основой для функций, связанных с категориями. Этот класс обычно " "используется для определения и управления категориями товаров или другими " "подобными группировками в приложении, позволяя пользователям или " @@ -1799,7 +1793,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Представляет объект Brand в системе. Этот класс обрабатывает информацию и " "атрибуты, связанные с брендом, включая его название, логотипы, описание, " @@ -1848,8 +1843,8 @@ msgstr "Категории" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1942,8 +1937,8 @@ msgstr "" "цифровой статус, название, описание, номер детали и метка. Предоставляет " "связанные с ним полезные свойства для получения оценок, количества отзывов, " "цены, количества и общего числа заказов. Предназначен для использования в " -"системе, которая занимается электронной коммерцией или управлением запасами. " -"Этот класс взаимодействует со связанными моделями (такими как Category, " +"системе, которая занимается электронной коммерцией или управлением запасами." +" Этот класс взаимодействует со связанными моделями (такими как Category, " "Brand и ProductTag) и управляет кэшированием часто используемых свойств для " "повышения производительности. Он используется для определения и " "манипулирования данными о товаре и связанной с ним информацией в приложении." @@ -2001,8 +1996,8 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Представляет атрибут в системе. Этот класс используется для определения и " @@ -2073,12 +2068,12 @@ msgstr "Атрибут" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"Представляет собой конкретное значение для атрибута, связанного с продуктом. " -"Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше " +"Представляет собой конкретное значение для атрибута, связанного с продуктом." +" Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше " "организовать и динамически представить характеристики продукта." #: engine/core/models.py:788 @@ -2096,8 +2091,8 @@ msgstr "Конкретное значение для этого атрибута #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2147,8 +2142,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Представляет рекламную кампанию для товаров со скидкой. Этот класс " "используется для определения и управления рекламными кампаниями, " @@ -2224,15 +2219,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Представляет документальную запись, связанную с продуктом. Этот класс " "используется для хранения информации о документальных записях, связанных с " "конкретными продуктами, включая загруженные файлы и их метаданные. Он " "содержит методы и свойства для обработки типа файла и пути хранения " -"документальных файлов. Он расширяет функциональность определенных миксинов и " -"предоставляет дополнительные пользовательские возможности." +"документальных файлов. Он расширяет функциональность определенных миксинов и" +" предоставляет дополнительные пользовательские возможности." #: engine/core/models.py:998 msgid "documentary" @@ -2248,14 +2243,14 @@ msgstr "Неразрешенные" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Представляет адресную сущность, включающую сведения о местоположении и " "ассоциации с пользователем. Обеспечивает функциональность для хранения " @@ -2331,8 +2326,8 @@ msgstr "" "Представляет промокод, который можно использовать для получения скидки, " "управляя его сроком действия, типом скидки и применением. Класс PromoCode " "хранит информацию о промокоде, включая его уникальный идентификатор, " -"свойства скидки (размер или процент), срок действия, связанного пользователя " -"(если таковой имеется) и статус его использования. Он включает в себя " +"свойства скидки (размер или процент), срок действия, связанного пользователя" +" (если таковой имеется) и статус его использования. Он включает в себя " "функциональность для проверки и применения промокода к заказу, обеспечивая " "при этом соблюдение ограничений." @@ -2408,8 +2403,8 @@ msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -"Следует определить только один тип скидки (сумма или процент), но не оба или " -"ни один из них." +"Следует определить только один тип скидки (сумма или процент), но не оба или" +" ни один из них." #: engine/core/models.py:1171 msgid "promocode already used" @@ -2424,13 +2419,13 @@ msgstr "Неверный тип скидки для промокода {self.uui msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" -"Представляет заказ, оформленный пользователем. Этот класс моделирует заказ в " -"приложении, включая его различные атрибуты, такие как информация о " +"Представляет заказ, оформленный пользователем. Этот класс моделирует заказ в" +" приложении, включая его различные атрибуты, такие как информация о " "выставлении счета и доставке, статус, связанный пользователь, уведомления и " "связанные операции. Заказы могут иметь связанные продукты, к ним можно " "применять рекламные акции, устанавливать адреса и обновлять данные о " @@ -2468,8 +2463,8 @@ msgstr "Статус заказа" #: engine/core/models.py:1243 engine/core/models.py:1769 msgid "json structure of notifications to display to users" msgstr "" -"JSON-структура уведомлений для отображения пользователям, в административном " -"интерфейсе используется табличный вид" +"JSON-структура уведомлений для отображения пользователям, в административном" +" интерфейсе используется табличный вид" #: engine/core/models.py:1249 msgid "json representation of order attributes for this order" @@ -2522,7 +2517,8 @@ msgstr "Вы не можете добавить больше товаров, ч #: engine/core/models.py:1395 engine/core/models.py:1420 #: engine/core/models.py:1428 msgid "you cannot remove products from an order that is not a pending one" -msgstr "Вы не можете удалить товары из заказа, который не является отложенным." +msgstr "" +"Вы не можете удалить товары из заказа, который не является отложенным." #: engine/core/models.py:1416 #, python-brace-format @@ -2607,7 +2603,8 @@ msgid "feedback comments" msgstr "Комментарии к отзывам" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" @@ -2655,7 +2652,8 @@ msgstr "Покупная цена на момент заказа" #: engine/core/models.py:1763 msgid "internal comments for admins about this ordered product" -msgstr "Внутренние комментарии для администраторов об этом заказанном продукте" +msgstr "" +"Внутренние комментарии для администраторов об этом заказанном продукте" #: engine/core/models.py:1764 msgid "internal comments" @@ -2751,15 +2749,15 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Представляет функциональность загрузки цифровых активов, связанных с " "заказами. Класс DigitalAssetDownload предоставляет возможность управления и " "доступа к загрузкам, связанным с продуктами заказа. Он хранит информацию о " -"связанном с заказом продукте, количестве загрузок и о том, является ли актив " -"общедоступным. Он включает метод для генерации URL-адреса для загрузки " +"связанном с заказом продукте, количестве загрузок и о том, является ли актив" +" общедоступным. Он включает метод для генерации URL-адреса для загрузки " "актива, когда связанный заказ находится в состоянии завершения." #: engine/core/models.py:1961 @@ -2818,12 +2816,11 @@ msgstr "Привет %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" -"Благодарим вас за заказ #%(order.pk)s! Мы рады сообщить Вам, что приняли Ваш " -"заказ в работу. Ниже приведены детали вашего заказа:" +"Благодарим вас за заказ #%(order.pk)s! Мы рады сообщить Вам, что приняли Ваш" +" заказ в работу. Ниже приведены детали вашего заказа:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2933,8 +2930,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Спасибо за ваш заказ! Мы рады подтвердить вашу покупку. Ниже приведены " @@ -2977,23 +2973,23 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | свяжитесь с нами по инициативе" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | свяжитесь с нами по инициативе" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Подтверждение заказа" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | подтверждение заказа" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Заказ доставлен" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | заказ доставлен" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | Промокод предоставлен" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | Промокод предоставлен" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3007,7 +3003,8 @@ msgstr "Параметр NOMINATIM_URL должен быть настроен!" #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -"Размеры изображения не должны превышать w{max_width} x h{max_height} пикселей" +"Размеры изображения не должны превышать w{max_width} x h{max_height} " +"пикселей" #: engine/core/views.py:73 msgid "" @@ -3025,8 +3022,8 @@ msgid "" "Content-Type header for XML." msgstr "" "Обрабатывает подробный ответ на просмотр карты сайта. Эта функция " -"обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и " -"устанавливает заголовок Content-Type для XML." +"обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и" +" устанавливает заголовок Content-Type для XML." #: engine/core/views.py:123 msgid "" @@ -3068,14 +3065,10 @@ msgstr "Работает с логикой покупки как бизнеса #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Обрабатывает загрузку цифрового актива, связанного с заказом.\n" -"Эта функция пытается обслужить файл цифрового актива, расположенный в " -"каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, " -"указывающая на недоступность ресурса." +"Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3104,19 +3097,15 @@ msgstr "favicon не найден" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Обрабатывает запросы на фавикон веб-сайта.\n" -"Эта функция пытается обслужить файл favicon, расположенный в статической " -"директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, " -"указывающая на недоступность ресурса." +"Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Перенаправляет запрос на индексную страницу админки. Функция обрабатывает " @@ -3128,7 +3117,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Возвращает текущую версию eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3138,16 +3127,17 @@ msgid "" msgstr "" "Определяет набор представлений для управления операциями, связанными с " "Evibes. Класс EvibesViewSet наследует от ModelViewSet и предоставляет " -"функциональность для обработки действий и операций над сущностями Evibes. Он " -"включает в себя поддержку динамических классов сериализаторов в зависимости " -"от текущего действия, настраиваемые разрешения и форматы рендеринга." +"функциональность для обработки действий и операций над сущностями Evibes. Он" +" включает в себя поддержку динамических классов сериализаторов в зависимости" +" от текущего действия, настраиваемые разрешения и форматы рендеринга." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Представляет собой набор представлений для управления объектами " "AttributeGroup. Обрабатывает операции, связанные с AttributeGroup, включая " @@ -3155,7 +3145,7 @@ msgstr "" "уровня API приложения и обеспечивает стандартизированный способ обработки " "запросов и ответов на данные AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3171,22 +3161,22 @@ msgstr "" "например, фильтровать по определенным полям или получать подробную или " "упрощенную информацию в зависимости от запроса." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Набор представлений для управления объектами AttributeValue. Этот набор " "представлений предоставляет функциональность для перечисления, извлечения, " "создания, обновления и удаления объектов AttributeValue. Он интегрируется с " "механизмами наборов представлений Django REST Framework и использует " -"соответствующие сериализаторы для различных действий. Возможности фильтрации " -"предоставляются через DjangoFilterBackend." +"соответствующие сериализаторы для различных действий. Возможности фильтрации" +" предоставляются через DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3195,13 +3185,13 @@ msgid "" "can access specific data." msgstr "" "Управляет представлениями для операций, связанных с категорией. Класс " -"CategoryViewSet отвечает за обработку операций, связанных с моделью Category " -"в системе. Он поддерживает получение, фильтрацию и сериализацию данных " +"CategoryViewSet отвечает за обработку операций, связанных с моделью Category" +" в системе. Он поддерживает получение, фильтрацию и сериализацию данных " "категории. Набор представлений также обеспечивает соблюдение прав доступа, " "чтобы только авторизованные пользователи могли получить доступ к " "определенным данным." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3213,7 +3203,7 @@ msgstr "" "сериализации объектов Brand. Он использует фреймворк Django ViewSet для " "упрощения реализации конечных точек API для объектов Brand." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3231,7 +3221,7 @@ msgstr "" "методы для получения информации о продукте, применения разрешений и доступа " "к связанным отзывам о продукте." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3239,20 +3229,20 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"Представляет собой набор представлений для управления объектами Vendor. Этот " -"набор представлений позволяет получать, фильтровать и сериализовать данные о " -"поставщиках. Он определяет наборы запросов, конфигурации фильтров и классы " -"сериализаторов, используемые для выполнения различных действий. Цель этого " +"Представляет собой набор представлений для управления объектами Vendor. Этот" +" набор представлений позволяет получать, фильтровать и сериализовать данные " +"о поставщиках. Он определяет наборы запросов, конфигурации фильтров и классы" +" сериализаторов, используемые для выполнения различных действий. Цель этого " "класса - обеспечить упрощенный доступ к ресурсам, связанным с Vendor, через " "фреймворк Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Представление набора представлений, обрабатывающих объекты Feedback. Этот " @@ -3263,47 +3253,48 @@ msgstr "" "доступа. Он расширяет базовый `EvibesViewSet` и использует систему " "фильтрации Django для запроса данных." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet для управления заказами и связанными с ними операциями. Этот класс " "предоставляет функциональность для получения, изменения и управления " -"объектами заказов. Он включает в себя различные конечные точки для обработки " -"операций с заказами, таких как добавление или удаление продуктов, выполнение " -"покупок для зарегистрированных и незарегистрированных пользователей, а также " -"получение информации о текущих заказах аутентифицированного пользователя. " -"ViewSet использует несколько сериализаторов в зависимости от конкретного " -"выполняемого действия и соответствующим образом устанавливает разрешения при " -"взаимодействии с данными заказа." +"объектами заказов. Он включает в себя различные конечные точки для обработки" +" операций с заказами, таких как добавление или удаление продуктов, " +"выполнение покупок для зарегистрированных и незарегистрированных " +"пользователей, а также получение информации о текущих заказах " +"аутентифицированного пользователя. ViewSet использует несколько " +"сериализаторов в зависимости от конкретного выполняемого действия и " +"соответствующим образом устанавливает разрешения при взаимодействии с " +"данными заказа." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Предоставляет набор представлений для управления сущностями OrderProduct. " "Этот набор представлений позволяет выполнять CRUD-операции и " "пользовательские действия, специфичные для модели OrderProduct. Он включает " -"фильтрацию, проверку прав доступа и переключение сериализатора в зависимости " -"от запрашиваемого действия. Кроме того, он предоставляет подробное действие " -"для обработки отзывов об экземплярах OrderProduct" +"фильтрацию, проверку прав доступа и переключение сериализатора в зависимости" +" от запрашиваемого действия. Кроме того, он предоставляет подробное действие" +" для обработки отзывов об экземплярах OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "" "Управляет операциями, связанными с изображениями продуктов в приложении." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3311,21 +3302,21 @@ msgstr "" "Управляет получением и обработкой экземпляров PromoCode с помощью различных " "действий API." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "" "Представляет собой набор представлений для управления рекламными акциями." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Выполняет операции, связанные с данными о запасах в системе." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3338,7 +3329,7 @@ msgstr "" "проверка прав доступа гарантирует, что пользователи смогут управлять только " "своими списками желаний, если не предоставлены явные права." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3353,12 +3344,12 @@ msgstr "" "методов HTTP, переопределение сериализатора и обработку разрешений в " "зависимости от контекста запроса." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3366,8 +3357,8 @@ msgid "" "using the specified filter backend and dynamically uses different " "serializers based on the action being performed." msgstr "" -"Обрабатывает операции, связанные с тегами продуктов в приложении. Этот класс " -"предоставляет функциональность для получения, фильтрации и сериализации " +"Обрабатывает операции, связанные с тегами продуктов в приложении. Этот класс" +" предоставляет функциональность для получения, фильтрации и сериализации " "объектов Product Tag. Он поддерживает гибкую фильтрацию по определенным " "атрибутам с помощью указанного бэкэнда фильтрации и динамически использует " "различные сериализаторы в зависимости от выполняемого действия." diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.mo b/engine/core/locale/sv_SE/LC_MESSAGES/django.mo index e1584aca911233fd6e72bbb574a36c0f808f6107..47c9baf37aaf27b5762fa02e5cef852c7f00f884 100644 GIT binary patch delta 5484 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 Vw^C7D(=xosr?zKK{J+*?{|9(X(*ytj delta 5495 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�a^>(;7O`{nLcw)&7Li@ g7R|hE;mpgu|6j{B)j3{L^UGs1SlXI#6<+cG02&|0H2?qr diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.po b/engine/core/locale/sv_SE/LC_MESSAGES/django.po index 92b94fb7..5aa8ef10 100644 --- a/engine/core/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/core/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -27,7 +27,8 @@ msgstr "Är aktiv" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Om det är inställt på false kan objektet inte ses av användare utan " "nödvändigt tillstånd" @@ -48,89 +49,89 @@ msgstr "Modifierad" msgid "when the object was last modified" msgstr "När objektet senast redigerades" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Översättningar" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Allmänt" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Relationer" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "Ytterligare information" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Tidsstämplar" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivera vald %(verbose_name_plural)s." -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Valda artiklar har aktiverats!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Avaktivera vald %(verbose_name_plural)s." -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Valda objekt har avaktiverats!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Attributvärde" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Attributets värden" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Bild" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Bilder" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Beställ produkt" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Beställ produkter" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Barn och ungdomar" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfig" @@ -154,7 +155,8 @@ msgstr "Levereras" msgid "canceled" msgstr "Annullerad" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Misslyckades" @@ -195,7 +197,7 @@ msgstr "" "OpenApi3-schema för detta API. Format kan väljas via innehållsförhandling. " "Språk kan väljas med både Accept-Language och frågeparameter." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -205,8 +207,7 @@ msgid "" "apply key, data and timeout with authentication to write data to cache." msgstr "" "Använd endast en nyckel för att läsa tillåtna data från cacheminnet.\n" -"Använd nyckel, data och timeout med autentisering för att skriva data till " -"cacheminnet." +"Använd nyckel, data och timeout med autentisering för att skriva data till cacheminnet." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -220,7 +221,7 @@ msgstr "Hämta applikationens exponerbara parametrar" msgid "send a message to the support team" msgstr "Skicka ett meddelande till supportteamet" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Begär en CORSed URL. Endast https tillåtet." @@ -270,7 +271,8 @@ msgstr "" "Skriva om en befintlig attributgrupp och spara icke-redigerbara attribut" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Skriv om vissa fält i en befintlig attributgrupp och spara icke-redigerbara " "fält" @@ -298,7 +300,8 @@ msgstr "Skriva om ett befintligt attribut och spara icke-redigerbara" #: engine/core/docs/drf/viewsets.py:141 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara fält" +"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara " +"fält" #: engine/core/docs/drf/viewsets.py:151 msgid "list all attribute values (simple view)" @@ -321,7 +324,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "Skriva om ett befintligt attributvärde som sparar icke-redigerbara" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Skriva om vissa fält i ett befintligt attributvärde och spara icke-" "redigerbara fält" @@ -356,9 +360,9 @@ msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -378,8 +382,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Substringsökning utan skiftlägeskänslighet över human_readable_id, " "order_products.product.name och order_products.product.partnumber" @@ -403,7 +407,8 @@ msgstr "Filtrera efter exakt mänskligt läsbart order-ID" #: engine/core/docs/drf/viewsets.py:308 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" -"Filtrera efter användarens e-post (exakt matchning utan skiftlägeskänslighet)" +"Filtrera efter användarens e-post (exakt matchning utan " +"skiftlägeskänslighet)" #: engine/core/docs/drf/viewsets.py:313 msgid "Filter by user's UUID" @@ -415,9 +420,9 @@ msgstr "Filtrera efter orderstatus (skiftlägeskänslig matchning av delsträng) #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Ordna efter en av följande: uuid, human_readable_id, user_email, user, " "status, created, modified, buy_time, random. Prefix med \"-\" för fallande " @@ -472,7 +477,7 @@ msgstr "hämta aktuell pågående order för en användare" msgid "retrieves a current pending order of an authenticated user" msgstr "hämtar en aktuell väntande order för en autentiserad användare" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "köpa en order utan att skapa ett konto" @@ -513,8 +518,8 @@ msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "" -"Tar bort en produkt från en order med hjälp av de angivna `product_uuid` och " -"`attributen`." +"Tar bort en produkt från en order med hjälp av de angivna `product_uuid` och" +" `attributen`." #: engine/core/docs/drf/viewsets.py:447 msgid "remove product from order, quantities will not count" @@ -535,7 +540,8 @@ msgstr "Lista alla attribut (enkel vy)" #: engine/core/docs/drf/viewsets.py:460 msgid "for non-staff users, only their own wishlists are returned." msgstr "" -"För användare som inte är anställda returneras endast deras egna önskelistor." +"För användare som inte är anställda returneras endast deras egna " +"önskelistor." #: engine/core/docs/drf/viewsets.py:467 msgid "retrieve a single wishlist (detailed view)" @@ -560,7 +566,8 @@ msgstr "Skriva om ett befintligt attribut och spara icke-redigerbara" #: engine/core/docs/drf/viewsets.py:496 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara fält" +"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara " +"fält" #: engine/core/docs/drf/viewsets.py:503 msgid "retrieve current pending wishlist of a user" @@ -615,26 +622,17 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Filtrera efter ett eller flera attributnamn/värdepar. \n" "- **Syntax**: `attr_namn=metod-värde[;attr2=metod2-värde2]...`\n" -"- **Metoder** (standard är `icontains` om den utelämnas): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"- **Värde typning**: JSON prövas först (så att du kan skicka listor/dikter), " -"`true`/`false` för booleaner, heltal, flottörer; annars behandlas som " -"sträng. \n" +"- **Metoder** (standard är `icontains` om den utelämnas): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- **Värde typning**: JSON prövas först (så att du kan skicka listor/dikter), `true`/`false` för booleaner, heltal, flottörer; annars behandlas som sträng. \n" "- **Base64**: prefix med `b64-` för URL-säker base64-kodning av råvärdet. \n" "Exempel på detta: \n" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" @@ -650,12 +648,10 @@ msgstr "(exakt) UUID för produkt" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Kommaseparerad lista över fält att sortera efter. Prefix med `-` för " -"fallande. \n" +"Kommaseparerad lista över fält att sortera efter. Prefix med `-` för fallande. \n" "**Tillåtna:** uuid, betyg, namn, slug, skapad, modifierad, pris, slumpmässig" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 @@ -669,6 +665,9 @@ msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Skapa en produkt" @@ -1099,248 +1098,250 @@ msgstr "Nivå" msgid "Product UUID" msgstr "Produktens UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Nyckel att leta efter i eller sätta in i cachen" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Data som ska lagras i cacheminnet" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder för att lägga data i cacheminnet" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Cachad data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "Cameliserad JSON-data från den begärda URL:en" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Endast webbadresser som börjar med http(s):// är tillåtna" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Lägg till en produkt i ordern" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} hittades inte!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Ta bort alla produkter från ordern" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Köpa en order" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -"Vänligen ange antingen order_uuid eller order_hr_id - ömsesidigt uteslutande!" +"Vänligen ange antingen order_uuid eller order_hr_id - ömsesidigt " +"uteslutande!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Utför en åtgärd på en lista med produkter i ordern" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Ta bort/lägga till" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Åtgärden måste vara antingen \"lägg till\" eller \"ta bort\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "Utför en åtgärd på en lista med produkter i önskelistan" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Vänligen ange värdet för `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Önskelista {wishlist_uuid} hittades inte!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Lägg till en produkt i ordern" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Köpa en order" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Skicka attributen som en sträng formaterad som attr1=värde1,attr2=värde2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Lägg till eller ta bort en feedback för orderprodukten" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Åtgärden måste vara antingen `add` eller `remove`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderprodukt {order_product_uuid} hittades inte!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Originaladresssträng som tillhandahålls av användaren" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Gränsen måste vara mellan 1 och 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerar som en smäck" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Attribut" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grupperade attribut" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupper av attribut" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Brands" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procentuell påslagning" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Vilka attribut och värden som kan användas för att filtrera denna kategori." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Minsta och högsta pris för produkter i denna kategori, om tillgängligt." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Taggar för denna kategori" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkter i denna kategori" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Leverantörer" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitud (Y-koordinat)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitud (X-koordinat)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Hur gör man" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Ratingvärde från 1 till och med 10, eller 0 om det inte är inställt." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representerar feedback från en användare." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Meddelanden" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Nedladdningsadress för denna orderprodukt om tillämpligt" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Återkoppling" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "En lista över orderprodukter i den här ordern" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Faktureringsadress" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1348,53 +1349,53 @@ msgstr "" "Leveransadress för denna order, lämna tom om den är samma som " "faktureringsadressen eller om den inte är tillämplig" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Totalpris för denna order" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Totalt antal produkter i ordern" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Är alla produkter i beställningen digitala" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transaktioner för denna order" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Beställningar" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL för bild" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Produktens bilder" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Återkoppling" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Varumärke" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attributgrupper" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1402,7 +1403,7 @@ msgstr "Attributgrupper" msgid "price" msgstr "Pris" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1410,39 +1411,39 @@ msgstr "Pris" msgid "quantity" msgstr "Kvantitet" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Antal återkopplingar" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkter endast tillgängliga för personliga beställningar" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Rabatterat pris" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Produkter" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promokoder" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkter på rea" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Kampanjer" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Leverantör" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1450,99 +1451,98 @@ msgstr "Leverantör" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Önskelistade produkter" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Önskelistor" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Taggade produkter" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Produkttaggar" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Taggade kategorier" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategoriernas taggar" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Projektets namn" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Företagets namn" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Företagets adress" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Företagets telefonnummer" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" -msgstr "" -"\"email from\", ibland måste det användas istället för host user-värdet" +msgstr "\"email from\", ibland måste det användas istället för host user-värdet" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "E-post värd användare" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Högsta belopp för betalning" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Lägsta belopp för betalning" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analysdata" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Annonsdata" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfiguration" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Språkkod" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Språkets namn" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Språkflagga, om sådan finns :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Hämta en lista över språk som stöds" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Sökresultat för produkter" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Sökresultat för produkter" @@ -1554,8 +1554,8 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" "Representerar en grupp av attribut, som kan vara hierarkiska. Denna klass " -"används för att hantera och organisera attributgrupper. En attributgrupp kan " -"ha en överordnad grupp som bildar en hierarkisk struktur. Detta kan vara " +"används för att hantera och organisera attributgrupper. En attributgrupp kan" +" ha en överordnad grupp som bildar en hierarkisk struktur. Detta kan vara " "användbart för att kategorisera och hantera attribut på ett mer effektivt " "sätt i ett komplext system." @@ -1588,10 +1588,10 @@ msgstr "" "Representerar en vendor-enhet som kan lagra information om externa " "leverantörer och deras interaktionskrav. Klassen Vendor används för att " "definiera och hantera information som är relaterad till en extern " -"leverantör. Den lagrar leverantörens namn, autentiseringsuppgifter som krävs " -"för kommunikation och den procentuella markering som tillämpas på produkter " -"som hämtas från leverantören. Modellen innehåller också ytterligare metadata " -"och begränsningar, vilket gör den lämplig att använda i system som " +"leverantör. Den lagrar leverantörens namn, autentiseringsuppgifter som krävs" +" för kommunikation och den procentuella markering som tillämpas på produkter" +" som hämtas från leverantören. Modellen innehåller också ytterligare " +"metadata och begränsningar, vilket gör den lämplig att använda i system som " "interagerar med tredjepartsleverantörer." #: engine/core/models.py:124 @@ -1649,8 +1649,8 @@ msgstr "" "identifiera produkter. Klassen ProductTag är utformad för att unikt " "identifiera och klassificera produkter genom en kombination av en intern " "taggidentifierare och ett användarvänligt visningsnamn. Den stöder " -"operationer som exporteras via mixins och tillhandahåller metadataanpassning " -"för administrativa ändamål." +"operationer som exporteras via mixins och tillhandahåller metadataanpassning" +" för administrativa ändamål." #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1709,8 +1709,8 @@ msgstr "" "innehåller fält för metadata och visuell representation, som utgör grunden " "för kategorirelaterade funktioner. Den här klassen används vanligtvis för " "att definiera och hantera produktkategorier eller andra liknande " -"grupperingar inom en applikation, så att användare eller administratörer kan " -"ange namn, beskrivning och hierarki för kategorier samt tilldela attribut " +"grupperingar inom en applikation, så att användare eller administratörer kan" +" ange namn, beskrivning och hierarki för kategorier samt tilldela attribut " "som bilder, taggar eller prioritet." #: engine/core/models.py:274 @@ -1762,7 +1762,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Representerar ett Brand-objekt i systemet. Klassen hanterar information och " "attribut som är relaterade till ett varumärke, inklusive dess namn, " @@ -1812,8 +1813,8 @@ msgstr "Kategorier" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1905,8 +1906,8 @@ msgstr "" "Representerar en produkt med attribut som kategori, varumärke, taggar, " "digital status, namn, beskrivning, artikelnummer och slug. Tillhandahåller " "relaterade verktygsegenskaper för att hämta betyg, feedbackräkning, pris, " -"kvantitet och totala beställningar. Utformad för användning i ett system som " -"hanterar e-handel eller lagerhantering. Klassen interagerar med relaterade " +"kvantitet och totala beställningar. Utformad för användning i ett system som" +" hanterar e-handel eller lagerhantering. Klassen interagerar med relaterade " "modeller (t.ex. Category, Brand och ProductTag) och hanterar cachelagring " "för egenskaper som används ofta för att förbättra prestandan. Den används " "för att definiera och manipulera produktdata och tillhörande information i " @@ -1965,16 +1966,16 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"Representerar ett attribut i systemet. Denna klass används för att definiera " -"och hantera attribut, som är anpassningsbara bitar av data som kan " +"Representerar ett attribut i systemet. Denna klass används för att definiera" +" och hantera attribut, som är anpassningsbara bitar av data som kan " "associeras med andra enheter. Attribut har associerade kategorier, grupper, " "värdetyper och namn. Modellen stöder flera typer av värden, inklusive " -"sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till " -"dynamisk och flexibel datastrukturering." +"sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till" +" dynamisk och flexibel datastrukturering." #: engine/core/models.py:733 msgid "group of this attribute" @@ -2036,9 +2037,9 @@ msgstr "Attribut" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Representerar ett specifikt värde för ett attribut som är kopplat till en " "produkt. Det kopplar \"attributet\" till ett unikt \"värde\", vilket " @@ -2060,8 +2061,8 @@ msgstr "Det specifika värdet för detta attribut" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2109,8 +2110,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "Representerar en kampanj för produkter med rabatt. Den här klassen används " "för att definiera och hantera kampanjer som erbjuder en procentbaserad " @@ -2159,8 +2160,8 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" "Representerar en användares önskelista för lagring och hantering av önskade " -"produkter. Klassen tillhandahåller funktionalitet för att hantera en samling " -"produkter, med stöd för operationer som att lägga till och ta bort " +"produkter. Klassen tillhandahåller funktionalitet för att hantera en samling" +" produkter, med stöd för operationer som att lägga till och ta bort " "produkter, samt stöd för operationer för att lägga till och ta bort flera " "produkter samtidigt." @@ -2186,15 +2187,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Representerar en dokumentärpost som är knuten till en produkt. Denna klass " "används för att lagra information om dokumentärer som är relaterade till " "specifika produkter, inklusive filuppladdningar och deras metadata. Den " "innehåller metoder och egenskaper för att hantera filtyp och lagringssökväg " -"för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och " -"tillhandahåller ytterligare anpassade funktioner." +"för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och" +" tillhandahåller ytterligare anpassade funktioner." #: engine/core/models.py:998 msgid "documentary" @@ -2210,24 +2211,24 @@ msgstr "Olöst" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Representerar en adressentitet som innehåller platsinformation och " "associationer med en användare. Tillhandahåller funktionalitet för lagring " -"av geografiska data och adressdata samt integration med geokodningstjänster. " -"Denna klass är utformad för att lagra detaljerad adressinformation inklusive " -"komponenter som gata, stad, region, land och geolokalisering (longitud och " -"latitud). Den stöder integration med API:er för geokodning, vilket möjliggör " -"lagring av råa API-svar för vidare bearbetning eller inspektion. Klassen gör " -"det också möjligt att associera en adress med en användare, vilket " -"underlättar personlig datahantering." +"av geografiska data och adressdata samt integration med geokodningstjänster." +" Denna klass är utformad för att lagra detaljerad adressinformation " +"inklusive komponenter som gata, stad, region, land och geolokalisering " +"(longitud och latitud). Den stöder integration med API:er för geokodning, " +"vilket möjliggör lagring av råa API-svar för vidare bearbetning eller " +"inspektion. Klassen gör det också möjligt att associera en adress med en " +"användare, vilket underlättar personlig datahantering." #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2368,8 +2369,8 @@ msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -"Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda " -"eller ingendera." +"Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda" +" eller ingendera." #: engine/core/models.py:1171 msgid "promocode already used" @@ -2384,8 +2385,8 @@ msgstr "Ogiltig rabattyp för promokod {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" @@ -2553,9 +2554,9 @@ msgstr "" "Hanterar feedback från användare för produkter. Den här klassen är utformad " "för att fånga upp och lagra feedback från användare om specifika produkter " "som de har köpt. Den innehåller attribut för att lagra användarkommentarer, " -"en referens till den relaterade produkten i ordern och ett användartilldelat " -"betyg. Klassen använder databasfält för att effektivt modellera och hantera " -"feedbackdata." +"en referens till den relaterade produkten i ordern och ett användartilldelat" +" betyg. Klassen använder databasfält för att effektivt modellera och hantera" +" feedbackdata." #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2566,10 +2567,11 @@ msgid "feedback comments" msgstr "Återkoppling av kommentarer" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "" -"Refererar till den specifika produkten i en order som denna feedback handlar " -"om" +"Refererar till den specifika produkten i en order som denna feedback handlar" +" om" #: engine/core/models.py:1720 msgid "related order product" @@ -2599,10 +2601,10 @@ msgstr "" "OrderProduct-modellen innehåller information om en produkt som ingår i en " "order, inklusive detaljer som inköpspris, kvantitet, produktattribut och " "status. Den hanterar meddelanden till användaren och administratörer och " -"hanterar åtgärder som att returnera produktsaldot eller lägga till feedback. " -"Modellen innehåller också metoder och egenskaper som stöder affärslogik, t." -"ex. beräkning av totalpriset eller generering av en URL för nedladdning av " -"digitala produkter. Modellen integreras med Order- och Product-modellerna " +"hanterar åtgärder som att returnera produktsaldot eller lägga till feedback." +" Modellen innehåller också metoder och egenskaper som stöder affärslogik, " +"t.ex. beräkning av totalpriset eller generering av en URL för nedladdning av" +" digitala produkter. Modellen integreras med Order- och Product-modellerna " "och lagrar en referens till dem." #: engine/core/models.py:1757 @@ -2711,17 +2713,17 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" -"Representerar nedladdningsfunktionen för digitala tillgångar som är kopplade " -"till order. Klassen DigitalAssetDownload ger möjlighet att hantera och komma " -"åt nedladdningar som är relaterade till orderprodukter. Den upprätthåller " -"information om den associerade orderprodukten, antalet nedladdningar och om " -"tillgången är offentligt synlig. Den innehåller en metod för att generera en " -"URL för nedladdning av tillgången när den associerade ordern har statusen " -"slutförd." +"Representerar nedladdningsfunktionen för digitala tillgångar som är kopplade" +" till order. Klassen DigitalAssetDownload ger möjlighet att hantera och " +"komma åt nedladdningar som är relaterade till orderprodukter. Den " +"upprätthåller information om den associerade orderprodukten, antalet " +"nedladdningar och om tillgången är offentligt synlig. Den innehåller en " +"metod för att generera en URL för nedladdning av tillgången när den " +"associerade ordern har statusen slutförd." #: engine/core/models.py:1961 msgid "download" @@ -2735,8 +2737,8 @@ msgstr "Nedladdningar" msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -"du måste ge en kommentar, betyg och beställa produkt uuid för att lägga till " -"feedback." +"du måste ge en kommentar, betyg och beställa produkt uuid för att lägga till" +" feedback." #: engine/core/sitemaps.py:25 msgid "Home" @@ -2779,8 +2781,7 @@ msgstr "Hej %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Tack för din beställning #%(order.pk)s! Vi är glada att kunna informera dig " @@ -2895,8 +2896,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Tack för din beställning! Vi är glada att kunna bekräfta ditt köp. Nedan " @@ -2937,23 +2937,23 @@ msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | kontakta oss initierad" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | kontakta oss initierad" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Orderbekräftelse" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | orderbekräftelse" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Beställning levererad" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order levererad" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | promocode beviljad" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | promocode beviljad" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3026,14 +3026,10 @@ msgstr "Hanterar logiken i att köpa som ett företag utan registrering." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Hanterar nedladdning av en digital tillgång som är kopplad till en order.\n" -"Denna funktion försöker servera den digitala tillgångsfilen som finns i " -"lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel " -"som indikerar att resursen inte är tillgänglig." +"Denna funktion försöker servera den digitala tillgångsfilen som finns i lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel som indikerar att resursen inte är tillgänglig." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3062,19 +3058,15 @@ msgstr "favicon hittades inte" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Hanterar förfrågningar om favicon på en webbplats.\n" -"Denna funktion försöker servera favicon-filen som finns i den statiska " -"katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel " -"som anger att resursen inte är tillgänglig." +"Denna funktion försöker servera favicon-filen som finns i den statiska katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel som anger att resursen inte är tillgänglig." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "Omdirigerar begäran till indexsidan för admin. Funktionen hanterar " @@ -3086,7 +3078,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "Returnerar aktuell version av eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3095,25 +3087,26 @@ msgid "" "and rendering formats." msgstr "" "Definierar en vy för hantering av Evibes-relaterade operationer. Klassen " -"EvibesViewSet ärver från ModelViewSet och tillhandahåller funktionalitet för " -"att hantera åtgärder och operationer på Evibes-entiteter. Den innehåller " +"EvibesViewSet ärver från ModelViewSet och tillhandahåller funktionalitet för" +" att hantera åtgärder och operationer på Evibes-entiteter. Den innehåller " "stöd för dynamiska serializerklasser baserat på den aktuella åtgärden, " "anpassningsbara behörigheter och renderingsformat." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Representerar en vy för hantering av AttributeGroup-objekt. Hanterar " -"åtgärder relaterade till AttributeGroup, inklusive filtrering, serialisering " -"och hämtning av data. Denna klass är en del av applikationens API-lager och " -"tillhandahåller ett standardiserat sätt att behandla förfrågningar och svar " -"för AttributeGroup-data." +"åtgärder relaterade till AttributeGroup, inklusive filtrering, serialisering" +" och hämtning av data. Denna klass är en del av applikationens API-lager och" +" tillhandahåller ett standardiserat sätt att behandla förfrågningar och svar" +" för AttributeGroup-data." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3129,13 +3122,13 @@ msgstr "" "returneras, t.ex. filtrering efter specifika fält eller hämtning av " "detaljerad eller förenklad information beroende på begäran." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Ett viewset för hantering av AttributeValue-objekt. Denna viewset " "tillhandahåller funktionalitet för att lista, hämta, skapa, uppdatera och " @@ -3143,7 +3136,7 @@ msgstr "" "viewset-mekanismer och använder lämpliga serializers för olika åtgärder. " "Filtreringsfunktioner tillhandahålls genom DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3157,7 +3150,7 @@ msgstr "" "kategoridata. Vyuppsättningen tillämpar också behörigheter för att " "säkerställa att endast behöriga användare kan komma åt specifika data." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3165,11 +3158,11 @@ msgid "" "endpoints for Brand objects." msgstr "" "Representerar en vy för hantering av varumärkesinstanser. Denna klass " -"tillhandahåller funktionalitet för att fråga, filtrera och serialisera Brand-" -"objekt. Den använder Djangos ViewSet-ramverk för att förenkla " +"tillhandahåller funktionalitet för att fråga, filtrera och serialisera " +"Brand-objekt. Den använder Djangos ViewSet-ramverk för att förenkla " "implementeringen av API-slutpunkter för varumärkesobjekt." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3180,14 +3173,14 @@ msgid "" "product." msgstr "" "Hanterar operationer relaterade till modellen `Product` i systemet. Denna " -"klass tillhandahåller en vy för att hantera produkter, inklusive filtrering, " -"serialisering och operationer på specifika instanser. Den utökar från " +"klass tillhandahåller en vy för att hantera produkter, inklusive filtrering," +" serialisering och operationer på specifika instanser. Den utökar från " "`EvibesViewSet` för att använda gemensam funktionalitet och integreras med " "Django REST-ramverket för RESTful API-operationer. Innehåller metoder för " "att hämta produktinformation, tillämpa behörigheter och få tillgång till " "relaterad feedback för en produkt." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3195,54 +3188,54 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"Representerar en vy för hantering av Vendor-objekt. Denna vy gör det möjligt " -"att hämta, filtrera och serialisera Vendor-data. Den definierar queryset, " +"Representerar en vy för hantering av Vendor-objekt. Denna vy gör det möjligt" +" att hämta, filtrera och serialisera Vendor-data. Den definierar queryset, " "filterkonfigurationer och serializer-klasser som används för att hantera " "olika åtgärder. Syftet med denna klass är att ge strömlinjeformad åtkomst " "till Vendor-relaterade resurser genom Django REST-ramverket." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" -"Representation av en vyuppsättning som hanterar Feedback-objekt. Denna klass " -"hanterar åtgärder relaterade till Feedback-objekt, inklusive listning, " +"Representation av en vyuppsättning som hanterar Feedback-objekt. Denna klass" +" hanterar åtgärder relaterade till Feedback-objekt, inklusive listning, " "filtrering och hämtning av detaljer. Syftet med denna vyuppsättning är att " "tillhandahålla olika serializers för olika åtgärder och implementera " "behörighetsbaserad hantering av tillgängliga Feedback-objekt. Den utökar " "basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga " "data." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "ViewSet för hantering av order och relaterade operationer. Den här klassen " "innehåller funktioner för att hämta, ändra och hantera orderobjekt. Den " -"innehåller olika slutpunkter för hantering av orderoperationer som att lägga " -"till eller ta bort produkter, utföra inköp för registrerade och " +"innehåller olika slutpunkter för hantering av orderoperationer som att lägga" +" till eller ta bort produkter, utföra inköp för registrerade och " "oregistrerade användare och hämta den aktuella autentiserade användarens " "pågående order. ViewSet använder flera serializers baserat på den specifika " "åtgärd som utförs och verkställer behörigheter i enlighet med detta vid " "interaktion med orderdata." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Tillhandahåller en vy för hantering av OrderProduct-enheter. Denna " @@ -3252,11 +3245,11 @@ msgstr "" "åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " "feedback på OrderProduct-instanser" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3264,20 +3257,20 @@ msgstr "" "Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" "åtgärder." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Representerar en vyuppsättning för hantering av kampanjer." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3290,7 +3283,7 @@ msgstr "" "integrerade för att säkerställa att användare endast kan hantera sina egna " "önskelistor om inte uttryckliga behörigheter beviljas." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3304,12 +3297,12 @@ msgstr "" "innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" "överskrivningar och behörighetshantering baserat på förfrågningskontexten." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fel i geokodningen: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3320,5 +3313,5 @@ msgstr "" "Hanterar operationer relaterade till Product Tags inom applikationen. " "Klassen tillhandahåller funktionalitet för att hämta, filtrera och " "serialisera Product Tag-objekt. Den stöder flexibel filtrering på specifika " -"attribut med hjälp av det angivna filterbackend och använder dynamiskt olika " -"serializers baserat på den åtgärd som utförs." +"attribut med hjälp av det angivna filterbackend och använder dynamiskt olika" +" serializers baserat på den åtgärd som utförs." diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.mo b/engine/core/locale/th_TH/LC_MESSAGES/django.mo index ed0aabef613d3e1813c6e6dee8690bb7179fef3b..ebf8345c7051b8f58581277c058d120ddeca0813 100644 GIT binary patch delta 5461 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 Yf7dYMa1F27gDA45*XTjiyQbIfzwW94&;S4c delta 5448 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 +{% endblock %} diff --git a/engine/core/utils/commerce.py b/engine/core/utils/commerce.py new file mode 100644 index 00000000..e8896396 --- /dev/null +++ b/engine/core/utils/commerce.py @@ -0,0 +1,52 @@ +from datetime import timedelta + +from django.db.models import F, Sum +from django.db.models.functions import Coalesce +from django.utils.timezone import now +from constance import config +from engine.core.models import Order, OrderProduct + + +def get_period_order_products(period: timedelta = timedelta(days=30), statuses: list[str] | None = None): + if statuses is None: + statuses = ["FINISHED"] + current = now() + perioded = current - period + orders = Order.objects.filter(status="FINISHED", buy_time__lte=current, buy_time__gte=perioded) + return OrderProduct.objects.filter(status__in=statuses, order__in=orders) + + +def get_revenue(clear: bool = True, period: timedelta = timedelta(days=30)): + order_products = get_period_order_products(period) + total: float = ( + order_products.aggregate(total=Coalesce(Sum(F("buy_price") * F("quantity")), 0.0)).get("total") or 0.0 + ) + try: + total = float(total) + except (TypeError, ValueError): + total = 0.0 + + if clear: + try: + tax_rate = float(config.TAX_RATE or 0) + except (TypeError, ValueError): + tax_rate = 0.0 + net = total * (1 - tax_rate / 100.0) + return round(net, 2) + else: + return round(float(total), 2) + + +def get_returns(period: timedelta = timedelta(days=30)): + order_products = get_period_order_products(period, ["RETURNED"]) + total_returns: float = ( + order_products.aggregate(total=Coalesce(Sum(F("buy_price") * F("quantity")), 0.0)).get("total") or 0.0 + ) + try: + return round(float(total_returns), 2) + except (TypeError, ValueError): + return 0.0 + + +def get_total_processed_orders(period: timedelta = timedelta(days=30)): + return get_period_order_products(period, ["RETURNED", "FINISHED"]).count() diff --git a/engine/core/views.py b/engine/core/views.py index 0602bd1b..286fde27 100644 --- a/engine/core/views.py +++ b/engine/core/views.py @@ -52,6 +52,7 @@ from engine.core.serializers import ( LanguageSerializer, ) from engine.core.utils import get_project_parameters, is_url_safe +from engine.core.utils.commerce import get_revenue, get_returns, get_total_processed_orders from engine.core.utils.caching import web_cache from engine.core.utils.emailing import contact_us_email from engine.core.utils.languages import get_flag_by_language @@ -410,3 +411,27 @@ def version(request: HttpRequest, *args, **kwargs) -> HttpResponse: version.__doc__ = _( # type: ignore [assignment] "Returns current version of the eVibes. " ) + + +def dashboard_callback(request, context): + revenue_gross_30 = get_revenue(clear=False) + revenue_net_30 = get_revenue(clear=True) + returns_30 = get_returns() + processed_orders_30 = get_total_processed_orders() + + context.update( + { + "custom_variable": "value", + "revenue_gross_30": revenue_gross_30, + "revenue_net_30": revenue_net_30, + "returns_30": returns_30, + "processed_orders_30": processed_orders_30, + } + ) + + return context + + +dashboard_callback.__doc__ = _( # type: ignore [assignment] + "Returns custom variables for Dashboard. " +) diff --git a/evibes/settings/base.py b/evibes/settings/base.py index ac687ea4..10b9ffd2 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -250,6 +250,37 @@ LANGUAGES: tuple[tuple[str, str], ...] = ( ("zh-hans", "简体中文"), ) +LANGUAGES_FLAGS: dict[str, str] = { + "ar-ar": "🇸🇦", + "cs-cz": "🇨🇿", + "da-dk": "🇩🇰", + "de-de": "🇩🇪", + "en-gb": "🇬🇧", + "en-us": "🇺🇸", + "es-es": "🇪🇸", + "fa-ir": "🇮🇷", + "fr-fr": "🇫🇷", + "he-il": "🇮🇱", + "hi-in": "🇮🇳", + "hr-hr": "🇭🇷", + "id-id": "🇮🇩", + "it-it": "🇮🇹", + "ja-jp": "🇯🇵", + "kk-kz": "🇰🇿", + "ko-kr": "🇰🇷", + "nl-nl": "🇳🇱", + "no-no": "🇳🇴", + "pl-pl": "🇵🇱", + "pt-br": "🇧🇷", + "ro-ro": "🇷🇴", + "ru-ru": "🇷🇺", + "sv-se": "🇸🇪", + "th-th": "🇹🇭", + "tr-tr": "🇹🇷", + "vi-vn": "🇻🇳", + "zh-hans": "🇨🇳", +} + LANGUAGE_CODE: str = "en-gb" CURRENCIES_BY_LANGUAGES: tuple[tuple[str, str], ...] = ( diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index 17e74c26..ae8b2b0e 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -2,7 +2,14 @@ from django.templatetags.static import static from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ -from evibes.settings.base import PROJECT_NAME, STOREFRONT_DOMAIN, SUPPORT_CONTACT, TASKBOARD_URL +from evibes.settings.base import ( + PROJECT_NAME, + STOREFRONT_DOMAIN, + SUPPORT_CONTACT, + TASKBOARD_URL, + LANGUAGES as BASE_LANGUAGES, + LANGUAGES_FLAGS, +) UNFOLD = { "SITE_URL": STOREFRONT_DOMAIN, @@ -20,38 +27,22 @@ UNFOLD = { "search_models": True, "show_history": True, }, + "DASHBOARD_CALLBACK": "core.views.dashboard_callback", + "LANGUAGES": { + "navigation": [ + { + "bidi": code.split("-")[0] in {"ar", "he", "fa", "ur"}, + "code": code, + "name": LANGUAGES_FLAGS.get(code), + "name_local": name, + "name_translated": _(name), + } + for code, name in BASE_LANGUAGES + ], + }, "EXTENSIONS": { "modeltranslation": { - "flags": { - "ar-ar": "🇸🇦", - "cs-cz": "🇨🇿", - "da-dk": "🇩🇰", - "de-de": "🇩🇪", - "en-gb": "🇬🇧", - "en-us": "🇺🇸", - "es-es": "🇪🇸", - "fa-ir": "🇮🇷", - "fr-fr": "🇫🇷", - "he-il": "🇮🇱", - "hi-in": "🇮🇳", - "hr-hr": "🇭🇷", - "id-id": "🇮🇩", - "it-it": "🇮🇹", - "ja-jp": "🇯🇵", - "kk-kz": "🇰🇿", - "ko-kr": "🇰🇷", - "nl-nl": "🇳🇱", - "no-no": "🇳🇴", - "pl-pl": "🇵🇱", - "pt-br": "🇧🇷", - "ro-ro": "🇷🇴", - "ru-ru": "🇷🇺", - "sv-se": "🇸🇪", - "th-th": "🇹🇭", - "tr-tr": "🇹🇷", - "vi-vn": "🇻🇳", - "zh-hans": "🇨🇳", - }, + "flags": LANGUAGES_FLAGS, }, }, "SIDEBAR": { From 7c12b24c01b2466b5209e6caf87479ae395f0d3c Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 14:51:31 +0300 Subject: [PATCH 12/18] Features: 1) Set LANGUAGE_CODE to "en-gb" for UK English; Fixes: 1) Remove redundant LANGUAGE_CODE assignment; Extra: 1) Reordered settings for consistency; 2) Updated LANGUAGES_FLAGS with new flag mappings. --- evibes/settings/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 10b9ffd2..443695bc 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -250,6 +250,8 @@ LANGUAGES: tuple[tuple[str, str], ...] = ( ("zh-hans", "简体中文"), ) +LANGUAGE_CODE: str = "en-gb" + LANGUAGES_FLAGS: dict[str, str] = { "ar-ar": "🇸🇦", "cs-cz": "🇨🇿", @@ -281,8 +283,6 @@ LANGUAGES_FLAGS: dict[str, str] = { "zh-hans": "🇨🇳", } -LANGUAGE_CODE: str = "en-gb" - CURRENCIES_BY_LANGUAGES: tuple[tuple[str, str], ...] = ( ("ar-ar", "AED"), ("cs-cz", "CZK"), From 41c6f20635428fa03b316a557ff99eb5e3077e8c Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 14:56:19 +0300 Subject: [PATCH 13/18] Features: Fixes: 1) Update DASHBOARD_CALLBACK to point to correct view path; Extra: None --- evibes/settings/unfold.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index ae8b2b0e..41311357 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -27,7 +27,7 @@ UNFOLD = { "search_models": True, "show_history": True, }, - "DASHBOARD_CALLBACK": "core.views.dashboard_callback", + "DASHBOARD_CALLBACK": "engine.core.views.dashboard_callback", "LANGUAGES": { "navigation": [ { From 338b2df0c90a0eaba6846d2bca7aa1123fa0a08d Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 15:07:45 +0300 Subject: [PATCH 14/18] Features: 1) Refactored template logic to separate gross/returns context and total calculation for clarity; Fixes: 1) Fixed duplicate `{% with %}` block causing syntax error; Extra: 1) Improved template structure for maintainability; 2) Added missing closing `{% endwith %}`. --- engine/core/templates/admin/index.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html index 71416016..7f213e36 100644 --- a/engine/core/templates/admin/index.html +++ b/engine/core/templates/admin/index.html @@ -38,7 +38,8 @@
- {% with gross=revenue_gross_30|default:0 returns=returns_30|default:0 total=gross|add:returns %} + {% with gross=revenue_gross_30|default:0 returns=returns_30|default:0 %} + {% with total=gross|add:returns %}

{% trans "Sales vs Returns (30d)" %}

@@ -74,6 +75,7 @@ {% endif %}
{% endwith %} + {% endwith %}

{% trans "Quick Links" %}

From 20ecaa683fb44bf07e7782ce694d08766887ae9e Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 15:48:23 +0300 Subject: [PATCH 15/18] Features: 1) Added "Orders", "Taskboard", "Support", "Quick Links" settings; 2) Reordered and updated setting labels for consistency. Fixes: 1) Corrected line endings in locale file; 2) Updated POT-Creation-Date to reflect current build. Extra: 1) Refactored setting file to improve structure; 2) Ensured translation keys match updated UI labels. --- .../core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 105594 -> 106864 bytes .../core/locale/ar_AR/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 90369 -> 91414 bytes .../core/locale/cs_CZ/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/da_DK/LC_MESSAGES/django.mo | Bin 88225 -> 89225 bytes .../core/locale/da_DK/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/de_DE/LC_MESSAGES/django.mo | Bin 93461 -> 94481 bytes .../core/locale/de_DE/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/en_GB/LC_MESSAGES/django.mo | Bin 85055 -> 85990 bytes .../core/locale/en_GB/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/en_US/LC_MESSAGES/django.mo | Bin 85046 -> 85981 bytes .../core/locale/en_US/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/es_ES/LC_MESSAGES/django.mo | Bin 91426 -> 92455 bytes .../core/locale/es_ES/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/fa_IR/LC_MESSAGES/django.po | 109 +++++++++++--- .../core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 94219 -> 95266 bytes .../core/locale/fr_FR/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/he_IL/LC_MESSAGES/django.mo | Bin 98260 -> 99460 bytes .../core/locale/he_IL/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/hi_IN/LC_MESSAGES/django.po | 109 +++++++++++--- .../core/locale/hr_HR/LC_MESSAGES/django.po | 109 +++++++++++--- .../core/locale/id_ID/LC_MESSAGES/django.mo | Bin 88446 -> 89443 bytes .../core/locale/id_ID/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/it_IT/LC_MESSAGES/django.mo | Bin 91739 -> 92765 bytes .../core/locale/it_IT/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 97023 -> 98103 bytes .../core/locale/ja_JP/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/kk_KZ/LC_MESSAGES/django.po | 109 +++++++++++--- .../core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 91587 -> 92664 bytes .../core/locale/ko_KR/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 91305 -> 92298 bytes .../core/locale/nl_NL/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/no_NO/LC_MESSAGES/django.mo | Bin 88879 -> 89870 bytes .../core/locale/no_NO/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 90562 -> 91559 bytes .../core/locale/pl_PL/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 91167 -> 92204 bytes .../core/locale/pt_BR/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 93001 -> 94041 bytes .../core/locale/ro_RO/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 120491 -> 121808 bytes .../core/locale/ru_RU/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 88911 -> 89933 bytes .../core/locale/sv_SE/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/th_TH/LC_MESSAGES/django.mo | Bin 143950 -> 145597 bytes .../core/locale/th_TH/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 91281 -> 92291 bytes .../core/locale/tr_TR/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 102677 -> 103839 bytes .../core/locale/vi_VN/LC_MESSAGES/django.po | 107 +++++++++++--- .../core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 80069 -> 81012 bytes .../core/locale/zh_Hans/LC_MESSAGES/django.po | 107 +++++++++++--- engine/core/templates/admin/index.html | 138 +++++++++++++----- engine/core/views.py | 62 +++++++- evibes/locale/ar_AR/LC_MESSAGES/django.mo | Bin 10055 -> 10151 bytes evibes/locale/ar_AR/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 8637 -> 8723 bytes evibes/locale/cs_CZ/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/da_DK/LC_MESSAGES/django.mo | Bin 8352 -> 8438 bytes evibes/locale/da_DK/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/de_DE/LC_MESSAGES/django.mo | Bin 8792 -> 8879 bytes evibes/locale/de_DE/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/en_GB/LC_MESSAGES/django.mo | Bin 8213 -> 8291 bytes evibes/locale/en_GB/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/en_US/LC_MESSAGES/django.mo | Bin 8217 -> 8295 bytes evibes/locale/en_US/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/es_ES/LC_MESSAGES/django.mo | Bin 8814 -> 8898 bytes evibes/locale/es_ES/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/fa_IR/LC_MESSAGES/django.po | 74 +++++----- evibes/locale/fr_FR/LC_MESSAGES/django.mo | Bin 9098 -> 9181 bytes evibes/locale/fr_FR/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/he_IL/LC_MESSAGES/django.mo | Bin 9442 -> 9542 bytes evibes/locale/he_IL/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/hi_IN/LC_MESSAGES/django.po | 74 +++++----- evibes/locale/hr_HR/LC_MESSAGES/django.po | 74 +++++----- evibes/locale/id_ID/LC_MESSAGES/django.mo | Bin 8390 -> 8470 bytes evibes/locale/id_ID/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/it_IT/LC_MESSAGES/django.mo | Bin 8758 -> 8844 bytes evibes/locale/it_IT/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/ja_JP/LC_MESSAGES/django.mo | Bin 9117 -> 9211 bytes evibes/locale/ja_JP/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/kk_KZ/LC_MESSAGES/django.po | 74 +++++----- evibes/locale/ko_KR/LC_MESSAGES/django.mo | Bin 8567 -> 8647 bytes evibes/locale/ko_KR/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/nl_NL/LC_MESSAGES/django.mo | Bin 8468 -> 8553 bytes evibes/locale/nl_NL/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/no_NO/LC_MESSAGES/django.mo | Bin 8404 -> 8492 bytes evibes/locale/no_NO/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/pl_PL/LC_MESSAGES/django.mo | Bin 8699 -> 8786 bytes evibes/locale/pl_PL/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/pt_BR/LC_MESSAGES/django.mo | Bin 8788 -> 8870 bytes evibes/locale/pt_BR/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/ro_RO/LC_MESSAGES/django.mo | Bin 8833 -> 8914 bytes evibes/locale/ro_RO/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/ru_RU/LC_MESSAGES/django.mo | Bin 11147 -> 11247 bytes evibes/locale/ru_RU/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/sv_SE/LC_MESSAGES/django.mo | Bin 8488 -> 8575 bytes evibes/locale/sv_SE/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/th_TH/LC_MESSAGES/django.mo | Bin 12914 -> 13020 bytes evibes/locale/th_TH/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/tr_TR/LC_MESSAGES/django.mo | Bin 8818 -> 8911 bytes evibes/locale/tr_TR/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/vi_VN/LC_MESSAGES/django.mo | Bin 9352 -> 9441 bytes evibes/locale/vi_VN/LC_MESSAGES/django.po | 72 +++++---- evibes/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 7948 -> 8027 bytes evibes/locale/zh_Hans/LC_MESSAGES/django.po | 72 +++++---- evibes/settings/unfold.py | 72 +++++---- 107 files changed, 3737 insertions(+), 1563 deletions(-) diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.mo b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo index 544a862fed5e15d7126f90ddca5f86bd45d454a2..7129ab1043ee907cf4a3021de47acd6325c19a8c 100644 GIT binary patch delta 15188 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 delta 13953 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 diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.po b/engine/core/locale/ar_AR/LC_MESSAGES/django.po index 56c2224b..2d4a996e 100644 --- a/engine/core/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/core/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1084,7 +1084,7 @@ msgstr "البيانات المخزنة مؤقتاً" msgid "camelized JSON data from the requested URL" msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" @@ -2673,6 +2673,67 @@ msgstr "اتصل بنا" msgid "About Us" msgstr "نبذة عنا" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "مشرف موقع جانغو" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "لوحة التحكم" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "الإيرادات (الإجمالي، 30 د)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "الإيرادات (الصافي، 30 د)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "المرتجعات (30 د)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "الطلبات التي تمت معالجتها (30 د)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "المبيعات مقابل العوائد (30 د)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "الإجمالي" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "المرتجعات" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "لا توجد بيانات كافية للرسم البياني حتى الآن." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "روابط سريعة" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "لا توجد روابط متاحة." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "أكثر المنتجات المرغوبة" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "لا توجد بيانات بعد." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "المنتج الأكثر شعبية" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2883,7 +2944,7 @@ msgstr "يجب تكوين معلمة NOMINATIM_URL!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "يجب ألا تتجاوز أبعاد الصورة w{max_width} x h{max_height} بكسل!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2891,7 +2952,7 @@ msgstr "" "يتعامل مع طلب فهرس خريطة الموقع ويعيد استجابة XML. يضمن أن تتضمن الاستجابة " "رأس نوع المحتوى المناسب ل XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2900,16 +2961,16 @@ msgstr "" "يعالج استجابة العرض التفصيلي لخريطة الموقع. تقوم هذه الدالة بمعالجة الطلب، " "وجلب استجابة تفاصيل خريطة الموقع المناسبة، وتعيين رأس نوع المحتوى ل XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "إرجاع قائمة باللغات المدعومة والمعلومات الخاصة بها." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "إرجاع معلمات الموقع الإلكتروني ككائن JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2917,11 +2978,11 @@ msgstr "" "يعالج عمليات ذاكرة التخزين المؤقت مثل قراءة بيانات ذاكرة التخزين المؤقت " "وتعيينها بمفتاح ومهلة محددة." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "يتعامل مع عمليات إرسال نموذج \"اتصل بنا\"." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2929,15 +2990,15 @@ msgstr "" "يعالج طلبات معالجة عناوين URL والتحقق من صحة عناوين URL من طلبات POST " "الواردة." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "يتعامل مع استعلامات البحث العامة." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2945,31 +3006,31 @@ msgstr "" "يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" "تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "الطلب_برو_منتج_uuid مطلوب" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "طلب المنتج غير موجود" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "لا يحتوي منتج الطلب على منتج" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2977,7 +3038,7 @@ msgstr "" "يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" "تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2987,10 +3048,14 @@ msgstr "" " توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " "Django للتعامل مع إعادة توجيه HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "إرجاع الإصدار الحالي من eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "إرجاع المتغيرات المخصصة للوحة التحكم." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo index ffa342e6051cafc5d25081611adbb8899c87b6b0..24a70285e3006a1e56471af7088981a63f06c5b7 100644 GIT binary patch delta 15028 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 delta 13982 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

UB97UstZ=+%X0kkK41MO|<` zYL0fHM&f6zjehZV$m38Q8iSgW71$5=q289D1Y6${wOEItIx-ex@eR~ef0n@e--%42 z`gTX^kBZl$R`o;FjdC@xaTw}JqnvHAI`K#suW=r6UPpa~6l`eMKwH!UkHyY7vmx() zYcfAlpdQ5}+V~}`MVy1x@NZ1T%1L%E`=j2PF{qK5hxPFY>UDd9+Ak84?Q55bT6C*i zd=^uP1H37=K?~G|qgWT%hx$;uhnn-cjqC+8Q8!%SJcYWkC)HlCA*!R}@fkdb;h49v zwI*f|cf@4$zC%VMa1FKR$EMjmeF7@}%*92T*d443wxxWN^Rct_Gxox(QB!yuTVk`O z_C|~FS>kW72PQQ0tr@RbOhy-c;B205;}y=|oQchC`CR8EXLJi&KFN6+b%W5B_E)fp zs5P?_^>KU-_1ZqcV7>o^TiJqIIEjiR7azp3#9yF4-ax$_e_$2#w6^;|IBH62Vt4F| zYQG=#njJ>HT_@4k0n~M#U^%`2#oE|a8HJ^Z8)6`K!19=dS_{)L5pysb{n~o;pHP`S zs1C$s*eT1zVB+nlweU4+5eK%jTX!SpQ1t43T|q{x^BBgUr@bArI;ang&MuyX+84HB zE4+y6P*exIXfsjgug5lc7WJgz9qsEIkJ`$UQTs-#j=cZs*$@h}(JVy`*>2Pxeh5?W zENae5ce0Bt9Ce{FsMl~B_Q%zz4)}GpPaKPS4g0!yK59hwqwaIAv)A6>Dh1l1s&ug@ z)JJ{FWnnBXMZIQUp!WWNu69m~qqgiIqHH+^k$8UnV1W=c$E~FPTqKxS|JfA}=lgEZk@6PA8shgT z`v!F^B>(g%PW{t^y~XgBnrB>DJb7L&bB3hjI_YEOb^jm9fYVJU2)t|2O%%_?{ZLV+-oD~;#texZ#A$Kn#y-wJgUc200kr7ne}qlPQf=YA2&{79SFe@rHs z6|T_^e9`5#su$@@cXZ+ce^J+flt6wYmd7t${RbFISwG5NBrR~|f#lhteg9F4iu5|` zXhnHfFBLil5HuvOJ>XeaR>t`+W%>eIf;RO@wJ9%6`p?xq znTPrv0KBg*!>HflHGfASktz%h`r8Ke*e+~4?dVh1co;U750ofL+ZUA{7H z!l~2IgZxh1L)|C1o>a}X^T*%S2K8UQMvxv7Pa=K;E?e1{S2c%5$Gbqz%zrLO~ao3nlT?rCj4SnB~;`RJz33QAg z@$v0Df;r)J^7>o7j{T(7q)L>v!Wh?XB6%H;iS_9?(6zrr{uHSs2>P;Nu5ZalXTQ1@q3NQ<<_6C zaE$ASf_F#{X;6x?+vIDxx)6M<2JWa&8y%e~uY@0y5_KL&Jb*EA9Uw2Y4^&jGRJOAu;1d$ZRbJEizoP07VmUN8z^Hek>?Iulf z?S3Vnhx|6w@twu@|2uT!oF9n~U~N|}P7&uKz3D4sN#rK;h=RuW6{#NiRGdVrLi(L} zCFv&V=@CFair^S2k(A{s%F&s&q(!dnGFL9zkg8G_O489&a)0v%jqj2|NJA-%p{xQ) z$4Sy$Qcvnqs9S|KN#{s9YT*y03{o}X+O*k1zLu}n{XSC9lKVPCqF; z3vr~uR3s8VPkMp;%cRzne}vWC$%H1B_!Vq|7fBDum&N<4O-V>ZA(>;1}+~N3jLz2g*i~J}3VPDU$Yo z5w9RUAohI;8Vbcp6-g5*Jc^@fc*WO%z#T78_Vjq0x`Qs5Oun&eo9f!Ugnv>tj5gg! zvpm_iVpDTx*RS8mlRc+FWxwnl$)Sbjw~ELf*lLj{yF{CpJ=sg!&aSec$m>B1x{T_y z;M-Br3u=uno!xWv@C^U70nZH{y5PaLLD_kZR`o2I9O8+~9((LRzijWR<%Jit{-J*M zlOHa5vL9Vq>&f19WkiJk;k6?VZ(dR~!V|Qldwx&LC12(D)G66&z{tMABZeN{JY+yt TaQh~0O#2occlQtQZ147eP$K?R diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po index f5cc4c39..359cdbf0 100644 --- a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1119,7 +1119,7 @@ msgstr "Data uložená v mezipaměti" msgid "camelized JSON data from the requested URL" msgstr "Kamelizovaná data JSON z požadované adresy URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." @@ -2738,6 +2738,67 @@ msgstr "Kontaktujte nás" msgid "About Us" msgstr "O nás" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Správce webu Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Přístrojová deska" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Příjmy (hrubé, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Příjmy (čisté, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Návraty (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Zpracované objednávky (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Prodej vs. návratnost (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Hrubý" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Vrací se" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Zatím není dostatek údajů pro graf." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Rychlé odkazy" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Nejsou k dispozici žádné odkazy." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Nejžádanější produkt" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Zatím nejsou k dispozici žádné údaje." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Nejoblíbenější produkt" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2955,7 +3016,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Rozměry obrázku by neměly přesáhnout w{max_width} x h{max_height} pixelů." -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2963,7 +3024,7 @@ msgstr "" "Zpracuje požadavek na index mapy stránek a vrátí odpověď XML. Zajistí, aby " "odpověď obsahovala odpovídající hlavičku typu obsahu XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2973,16 +3034,16 @@ msgstr "" "požadavek, načte příslušnou podrobnou odpověď mapy stránek a nastaví " "hlavičku Content-Type pro XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Vrátí seznam podporovaných jazyků a odpovídajících informací." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Vrátí parametry webové stránky jako objekt JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2990,11 +3051,11 @@ msgstr "" "Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se" " zadaným klíčem a časovým limitem." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Zpracovává odeslání formuláře `contact us`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3002,15 +3063,15 @@ msgstr "" "Zpracovává požadavky na zpracování a ověřování adres URL z příchozích " "požadavků POST." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Zpracovává globální vyhledávací dotazy." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Řeší logiku nákupu jako firmy bez registrace." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3018,31 +3079,31 @@ msgstr "" "Zpracovává stahování digitálního aktiva spojeného s objednávkou.\n" "Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid je povinné" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "objednávka produktu neexistuje" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Digitální aktivum můžete stáhnout pouze jednou" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "objednávka musí být zaplacena před stažením digitálního aktiva." -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Objednaný produkt nemá produkt" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3050,7 +3111,7 @@ msgstr "" "Zpracovává požadavky na favicon webové stránky.\n" "Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3061,10 +3122,14 @@ msgstr "" "administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá" " funkci `redirect` Djanga." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Vrací aktuální verzi systému eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Vrací vlastní proměnné pro Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.mo b/engine/core/locale/da_DK/LC_MESSAGES/django.mo index 7faad8929fa61fd6fb7bcb4b4ca6f8feef38136d..8852f9b39ca05766e755b4ac094150133c6f9bd0 100644 GIT binary patch delta 14931 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 OvhD1<=|P^T-v0;tG7YW( delta 13973 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1124,7 +1124,7 @@ msgstr "Cachelagrede data" msgid "camelized JSON data from the requested URL" msgstr "Cameliserede JSON-data fra den ønskede URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Kun URL'er, der starter med http(s)://, er tilladt." @@ -2764,6 +2764,67 @@ msgstr "Kontakt os" msgid "About Us" msgstr "Om os" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site-administrator" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Indtægter (brutto, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Indtægter (netto, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Returnerer (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Behandlede ordrer (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Salg vs. returnering (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Returnerer" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Ikke nok data til et diagram endnu." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Hurtige links" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Ingen tilgængelige links." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Mest ønskede produkt" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Ingen data endnu." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Mest populære produkt" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2981,7 +3042,7 @@ msgstr "" "Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} " "pixels." -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2989,7 +3050,7 @@ msgstr "" "Håndterer anmodningen om sitemap-indekset og returnerer et XML-svar. Den " "sikrer, at svaret indeholder den passende indholdstypeheader for XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2999,17 +3060,17 @@ msgstr "" "behandler anmodningen, henter det relevante sitemap-detaljesvar og " "indstiller Content-Type-headeren til XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over understøttede sprog og de tilhørende oplysninger." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer hjemmesidens parametre som et JSON-objekt." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3017,11 +3078,11 @@ msgstr "" "Håndterer cache-operationer som f.eks. læsning og indstilling af cachedata " "med en specificeret nøgle og timeout." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Håndterer indsendelser af `kontakt os`-formularer." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3029,15 +3090,15 @@ msgstr "" "Håndterer anmodninger om behandling og validering af URL'er fra indgående " "POST-anmodninger." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Håndterer globale søgeforespørgsler." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken i at købe som en virksomhed uden registrering." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3045,31 +3106,31 @@ msgstr "" "Håndterer download af et digitalt aktiv, der er knyttet til en ordre.\n" "Denne funktion forsøger at betjene den digitale aktivfil, der ligger i projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som tegn på, at ressourcen ikke er tilgængelig." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrævet" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "Bestil produkt findes ikke" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Du kan kun downloade det digitale aktiv én gang" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "Ordren skal betales, før det digitale aktiv downloades." -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "Favicon ikke fundet" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3077,7 +3138,7 @@ msgstr "" "Håndterer anmodninger om et websteds favicon.\n" "Denne funktion forsøger at servere favicon-filen, der ligger i projektets statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for at angive, at ressourcen ikke er tilgængelig." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3088,10 +3149,14 @@ msgstr "" "administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion " "til at håndtere HTTP-omdirigeringen." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Returnerer den aktuelle version af eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Returnerer brugerdefinerede variabler til Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.mo b/engine/core/locale/de_DE/LC_MESSAGES/django.mo index 0d6dcfb2ea5a5a04cfaf0d93182c3158cb75705a..5b4c25e001bf4b913558606993ad718fa2b11da8 100644 GIT binary patch delta 14960 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 diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.po b/engine/core/locale/de_DE/LC_MESSAGES/django.po index bbdcc681..43aa2575 100644 --- a/engine/core/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/core/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1163,7 +1163,7 @@ msgstr "Zwischengespeicherte Daten" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-Daten aus der angeforderten URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" @@ -2837,6 +2837,67 @@ msgstr "Kontakt" msgid "About Us" msgstr "Über uns" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django-Website-Administrator" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Einkommen (gross, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Einnahmen (netto, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Rückgaben (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Bearbeitete Aufträge (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Verkäufe vs. Retouren (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Rückgabe" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Noch nicht genug Daten für ein Diagramm." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Schnelle Links" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Keine Links verfügbar." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Meistgewünschtes Produkt" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Noch keine Daten." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Beliebtestes Produkt" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3056,7 +3117,7 @@ msgstr "" "Die Bildabmessungen sollten w{max_width} x h{max_height} Pixel nicht " "überschreiten" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3065,7 +3126,7 @@ msgstr "" "zurück. Sie stellt sicher, dass die Antwort den entsprechenden Content-Type-" "Header für XML enthält." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3075,18 +3136,18 @@ msgstr "" "Funktion verarbeitet die Anfrage, holt die entsprechende Sitemap-" "Detailantwort ab und setzt den Content-Type-Header für XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Gibt eine Liste der unterstützten Sprachen und der entsprechenden " "Informationen zurück." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Gibt die Parameter der Website als JSON-Objekt zurück." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3094,11 +3155,11 @@ msgstr "" "Erledigt Cache-Operationen wie das Lesen und Setzen von Cache-Daten mit " "einem bestimmten Schlüssel und Timeout." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Verarbeitet Übermittlungen des Formulars \"Kontaktieren Sie uns\"." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3106,15 +3167,15 @@ msgstr "" "Bearbeitet Anfragen zur Verarbeitung und Validierung von URLs aus " "eingehenden POST-Anfragen." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Bearbeitet globale Suchanfragen." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3122,33 +3183,33 @@ msgstr "" "Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag verbunden ist.\n" "Diese Funktion versucht, die Datei des digitalen Assets, die sich im Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid ist erforderlich" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "Produkt bestellen existiert nicht" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Sie können das digitale Asset nur einmal herunterladen" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "" "die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt " "werden" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Das Bestellprodukt hat kein Produkt" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3156,7 +3217,7 @@ msgstr "" "Bearbeitet Anfragen nach dem Favicon einer Website.\n" "Diese Funktion versucht, die Favicon-Datei, die sich im statischen Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3167,10 +3228,14 @@ msgstr "" "Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von " "Django für die Bearbeitung der HTTP-Umleitung." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Gibt die aktuelle Version von eVibes zurück." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Gibt benutzerdefinierte Variablen für das Dashboard zurück." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.mo b/engine/core/locale/en_GB/LC_MESSAGES/django.mo index b900c9b6288144f5bff183361eb3e09e889002d9..1a7883b333d4bd255aef940bd726fbfdb24fd5f2 100644 GIT binary patch delta 14913 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1087,7 +1087,7 @@ msgstr "Cached data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" @@ -2700,6 +2700,67 @@ msgstr "Contact Us" msgid "About Us" msgstr "About Us" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site admin" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Revenue (gross, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Revenue (net, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Returns (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Processed orders (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Sales vs Returns (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Returns" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Not enough data for chart yet." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Quick Links" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "No links available." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Most wished product" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "No data yet." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Most popular product" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2916,7 +2977,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2924,7 +2985,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2934,17 +2995,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2952,11 +3013,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2964,15 +3025,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Handles global search queries." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2980,31 +3041,31 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "order product does not exist" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon not found" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3012,7 +3073,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3022,10 +3083,14 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Returns custom variables for Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.mo b/engine/core/locale/en_US/LC_MESSAGES/django.mo index 77ab373e92049407f5e391856fce7cb9db78a83b..6fd8ef157ce008e7099fea9f8ee79b8aac4714d2 100644 GIT binary patch delta 14905 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 delta 13953 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 P2TVM=vwwi!jGX@i3L($G diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.po b/engine/core/locale/en_US/LC_MESSAGES/django.po index 33f2e8ca..609c7b12 100644 --- a/engine/core/locale/en_US/LC_MESSAGES/django.po +++ b/engine/core/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1083,7 +1083,7 @@ msgstr "Cached data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" @@ -2696,6 +2696,67 @@ msgstr "Contact Us" msgid "About Us" msgstr "About Us" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site admin" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Revenue (gross, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Revenue (net, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Returns (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Processed orders (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Sales vs Returns (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Returns" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Not enough data for chart yet." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Quick Links" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "No links available." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Most wished product" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "No data yet." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Most popular product" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2912,7 +2973,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2920,7 +2981,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2930,17 +2991,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2948,11 +3009,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2960,15 +3021,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Handles global search queries." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2976,31 +3037,31 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "order product does not exist" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon not found" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3008,7 +3069,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3018,10 +3079,14 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Returns custom variables for Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.mo b/engine/core/locale/es_ES/LC_MESSAGES/django.mo index 012cd06aefbf003822844497520d16045b4dd264..bf0f3afb8ebbc8df8ffd9ef583f06f801efe2239 100644 GIT binary patch delta 14994 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 delta 13939 zcmYk@2Yk)f|Htuj5rV{u5s65|NFqjzNUS6xMrcTk*t1scJ zrCL;n>QAdE+EP_oyL9-!-uE2;N57B9@jRb%&i#JR_pE#A@Auj%zgLd?c`ua6x59AE z%wtSBtX9&PE_sb<6s=NYHpUx6k$D+=d5qbO{=}sdj46QOSO}vq7;9r$Y>j@{A4}j6 z^zi~+4&3xw}pI&1gkkK1fPco(oreYs_2Fv3KoXP`##S9#jVhnvYyPFu3 zi8t{+CZ`(nF4k*mOkvvng2}{p)9j1XZD!y67#64ea}4JB<|3KW_z(+XvF7$oL$C~S zW%R?w7>rGkXPWN#0S{V_*~C3t8qz%nJM% z!?D{_#^m4>%#UR1<4A9My$4;{(UL8ncEtpocL#aZ698fg5z|%_1d^>SN3u zOzUe*P0ADdA@Lx*O}x6lF8OQWV={fU@hX|7>65CQ}PvRSDeL) zm}iRpTotTFoQbOUPIVQpVgm}kzz{6-EDyoT&Zejb_d(w_!ji;?P>b|`sFAygMX~-= zdp@LNY2qx@8XAOQI1X9tUbBo$CkkFd){nV|$(S~cgtJfw$T5t?a~OpFOkEKyhpLZ7 z`fif2GQNk}H5V}uuV5*>i)vqJx~7yMjEuHjP4x8~)#G&3fz%uIhNDpRFQCfTINv}` z*?!c>9YuBU5=P)Xtcs;)a5`cW)Rc|IsyyFpA)_0Ag$3{uM&dQp8wAX>^(9b?FcS5^ zx-L#eEw(Jwn|8)X9Do|~7f@?rCF(^tU}4;fUiEC3Yj6>D<7=o6-F4;pp0jfuh#K-p z)DYG}JunURpmr|qg%QNVP!E0)^WiGg3$8=mfAe#Uzvg5o1-ij;)S^0r`oM3f58OgM z_#tWp{AXE1Q0=Rs=DZ1NY6haFaH6YUgqo7gsE+SNJ@>>c#$P?TLKp z`lt`4qdL?bt6@LXqFjP{-~kt(MxCr?j{OpPB&>cB!b2XFErtIzA60aV_dT2T*I^OVm_*&yq!gREH0tKb}IZf$vd^>KazSd+3j4Uarn^Z&+iI9f?HLjgnDQlZEQwTr7a^pr&Ros@*YEN598d z3|efzEt64GIs(1vWS%3FgeOrC3|M04v@~kbRKj|gfYot0*1>g{7r#Vx{!wJsQ6P_?hWa-Q!y?OUTn!_L+n~xvU>q*Q%6Jef;!hZk z{>$yEk4D|EHR^N2P#u|%5%|V(#$Q8of`WYb0E^?_sJSb$!Y-m1R9qWdV1_GS;arcJ zy4O(m*^S!H`%!Ot3WM-x49173kt*R`X)7WyKLvHM1~x?P+riic7h*lUidyaESJ`$g zQLA|ZssmF|4_tsnaRcf>+p!!Tzz95x)zJGF8GSH%wcYm#sD^2%q3VNr^XaG#=3p^= z1$Bd5ER7dY4}5@$SYVCa4JjBv+z|_7U)24FBWuKK=97u1;5F1LKJWY)HDot10X=K& z;;WB!i3g&}*I^o-MvYk69CijaLOt+BEQxDTBeflMF6_br+W!a1=s`zOLvsNw#&=M=q}oQiX2zmAI0e<=B^Zu58ySDi z*?tP-1=N1_ylmqr)DX5p&3Qjmht{A*U^jNdL)ad}Ua@Oo6sD^lwMfk-I|9{FYoQHl zs-NEEwGS9Yf#zgB*1|o`Yp8=Mbh90irq1E0@-^514`B@cjWw~#t9G$wqdG7Pb^mu! zpF5A53P0}_d*d3Yf-b0rGf_9*hK=zW*2bvUYzModhI#?2{9_mYiJF>PuiJLLol8;W zM^ICC2Q{MJs$1>1UoWgfK@RGMU!b;So;U0pC89=V5VpXz*aR=TxYC=pqeC%;@;98< zU3s;)jA=&sU~G!-V5;{2T{5~+!rON4CSelsK}^AaP(4lBX3zLBSebYg2I2vX#1p84 z=_Yo^$5;frZ@1ff2>KCwQJIVV4BtdO=NNjE$=o8NxvsU#-gqEZB3_P- za3AW;@1us$v)dj}1yI{F2rFWB48<%Az+tEdPDYLFYAlGKq89I|-Hg9(TzHQ?;YwpV zaZS{lPeRT0Ce#}oL%s1`)X;|RwO_ZfsF8`o64(>fkx{4@S%~`F4%FKE4)r3z`xt+9 zp!_~N$1xa89EXK59ZO+HRJ$Qq9>-$^T!DJCJy-y*;#B+{HP^%5v+dSl8u3BY8p*rg zF3tci8Li$>48kPT5Vb?SQFm;J^H96wC~9%~zi+3iHELugqDE{J*2R;kb0g0I`{pUA zH8v1y<8{=OdCMQPH%vuU%*NKZ7wciZ59|XPVi@rN)SJ!1YM6_9@I{QpLLYKWd-yDd z5a%4?!Nj{!+p)o6yEf917xkKKGP-eZ)CZ=a=4K6+!3~%f_h3HUk1yees441s#E#rx zEJr*I*+?b_HDwte+bQgfed)+>)Qf&~RDU(|a??-j93|nEJah#6(4fU}yNI^pAmWd) zKGry4e|QYS^28glGJb$B;?Ee1V?Sf-^1zL_7{`8YN7nC4d;csf=%pf;%%^lOXGJKfPbLg_#ap9|BW5VaMVav#!lE6AMl(N z=+&DoJi~BMa3A&WbDw@^=PK!YYX;V#U3XMR7GpD9h0KCEk5TyYIbH^jq1sJ7Z%@cs zsHt6v%enu%=uh1I2gW~$g0??!2;tKgd2{S|nHw<`i+<$$nz-o|zGAWSRi*_)uCbD_ z@2|`=9>30lrTu^##=K7){s+^5=WfwC9`w;2-kNyhT@EzbUASitw$MMB|K3z|{*#{K zzK49X;fY5qFx~KP{?ULq>M=i?@H68v`ze1fkH>sMJl@aa`}f170v_K#UfuWi_(q~x zL62|S4#VPfU@PXu{m7~}AE0*EF)tY%Af}MVH)L_n1XRN$?2j#R0uS7Vn)50F9^Y*L!+Jie*BTFm1+azlAbE!Ga$0KJpRXglme&B-sQ)qBesR>I@k z=joV0`FPa+-{w4z&4~k;$1rT~9ECc-7GWYDz+}Ad>gzGDwD+10WcpAs8uezUQLFem zmeB`XT%?q(FN=jKkHcrM5%$C_*dF~#dwk#jT`-7vH^$>}R0mBNJ0<0@oc4blnU^Tf zz*=}6wR*#XJ-+YtN~j0Mqvo;+mcaI?5gXv*5vT{uL_K&T>Vhp)O0Dg~Z z|0Aly*HG;qqB>Y4%#K`a80W8sxH$#t;Yjq&A^OgC)CWF5-Qb)nzlB-@#md{yRm4!@ zc+^Rk<;sUTr=ebGF;>G>s24rrC8H1ifjS2Q_yTB-jj$~~hsE$~)EoYUT2z0dIusP) z@%<2qcD6!I;ZRij1uounzw@ONF=Hv39De1izlMydOmWlm=&0g zt5MtQGHR%UBkh3`jp{&mRQXuci_StV){V%T@|vw=v{?3FZTtxJpnIqj>M`m84Jz95 zk*I@ZGO7cwV^zG38kw+4b`8`;y>TPdqHE{u=^TvJwg1PHX+(p~xE(K{Ik@ayr*I*vqh~Ql`~Q|Q=ofA0t}JT* z*GDyMk9~14PR5fs3R}k5MfDzP3J+liyog#e@m1}MG)LV(6Ki5W)Cev|-~RuIj26=| z=LJ+x?_e!ViS_vY&Nmvhy5B?9e}kgyXHcv68mh+yYj}LWj>9mOI0f~l&!N`DE2yFU7B%F7{71lOOhCP1Z`5{s z(Z%~wQ+dr^>PX&%S`+6`i|uFBs{aeM zhJtF_I1D=y$Du^x3mY(w2(7ivmQy7)5c%zuPB`C{wX2R1-`E)zA9 zov;qhLoL#SsF4b(Ys)iHBQ^{3p?4n{_52{}!KYD+=Qq@p{DV4ji^kiv5RJNFS5(Ir zquOo6O1J|n;2Dg-hp0CVsb|+tBx(v8Blq>1iDdMqOE4L?pyvLH^AV~;MH1|d!%+uQ z6IA;_s5f~XHRNxjUStny@qK}ss^W?KBEnXfhO@At_Wv<58d|^l9^XH;)WQM&QGIO`FT`_AE35t;Rg22BT?l|Q6t<5HIl)SV;9s=uR@&z2T}X|4~)S^jqP?EfJ2C9quSp>)dwfpkxE6ak=Ce1+5_9-;w1Ke zJ2Dq3(A?BXw%cSFYSA3VNIZe+@l6cJht9Goc4X?K%KJEHIA2B`?T4@`{)^f@F->fT z6PtKFrZ)wfDab~@RQqGHJL--1qkb;mK&_FWrglowP!H^aHE*7tALj1Ltj83SM&Fl@DphjY{b0_M|zKLpAzPXKCqi#3_HKcE#_Vszx)Rkyq zACQU3#7nRteud32u%(T??a636EJE$;)0l*X((R4XQSn@Cjz_U22DY-F%SM&wpxRx= zR#>669r~fD2XDnr_%mi;nZmTZqa-&9owQ&8J48?{gSqQ31Wp^nVes73ZQ zuEc;2_IJQ0RC%e6cBtE6Eb%;i3U{N{O5SX{hH9g>X)p9@@ysEk2kb-L=q_s2SMOxE zUwhP;-Ys3SZXH3HpH9T(5E=iT9y11mP(wNw)sdr^j<->(woxy;2%kdTs2`TV6{rWjjxBJX)6?7T zj&$c*)Om6pb-;N;``7~{1GP`5qYjYwQQPJb=3sPRyLykH*2eFsgQe8db_6@3cF#=I zi2aWGe8qltuCq`tGz|6NHOOx8niH<#K6-h~uJSrO95B#rFX)bYF1lqQWQy+YYqEKkz&eHSn3JGHhG_2VWH#QL9IG3vhG ze;p}rO{^h)gR*aYpR)g&<+7#(^-nI&GQ&A!n!B<@@@#u^nxyL&(g(`x`IpJ~yNaH~ zspK!9{X1BZvc8m!CM|R2 zrOERZ78WmG;(YEQu})L}D_bdCI28jf-e#c|5=|0n*L zcmhd3Jaj!x`+hh8b(O>BHtYLkU68n)s|%o7luY?=_yb8-AKE;|Uc^gD-H0oZnoxGYwNbk<|H*Gr0oOpvo+m{r;Q1yWAMAi3 z6#kAA-G?e;1(&Ztn<~`l>P~(a?xpS{+)S$K+WFxPwL$$aU!zEW5zioAj0wcL-nQ`H z|0$T|0#TiYXGlv(x`w$ADF1@~a94{b8Pu<&$+Wx8XWk(VCjUHT`W2-!znQzo0_uWD z{6_Wt<&@tVUh_W!U1Lc6?(kg^d|(mzvhITiDBVB`rz`_&xpvdZ>-vXS-;M)a`ya@E zPAW4CyxM$yLX-Ptg7!!-pzRGn6!yxE!evWpjwnkq#5L zAnD4YycGG__w7(1%Khng??HEa=%>slQfTX(tW;!lOnTQe{lV)`L9pK7Sd`8 z(p<0a`l{_8``{VMtGF8!b8YnVX%l77kyg68Be;v?N1JhYlXQZ1-`QLFe&D=Lz9jV* zePzsl9(Tj7G}fghF@$^&7FGdQQ`)S>(WLiCd#I16Yykd2{EGW*8vgF`MQ{*l5%qqg zY|>{WT{TGjMatxH>(5s>(RD<@YoxzuP>Ql!vK2_ zcas9B8;+rrrIDUoOUQWVP@yZ!Vp`C6Kl#5&>qx6e-;;E;r0x@&_5C+qWq%^|rd-z! z%m4pb+}&FRKe~J{`K_+ST>H0ihJzcdra_NoS#d$$II7!IvXPPw7$-?fDQ`lYg5h`? z3y{i?-$1>t!=xDUAG){~@p4iosVMDcQQp$kokH!uZlnn6_u*7K|D1IMF%%~9p(j@r z^2wxnq+`^drJ@mO4{3&L_bd7Q8gq6Nm-<-#ItB2`1Xu_h%oMKaTTVegghUyWd>=1pVjbkuKe@`eKPVePo35n!p4^-DQuF3EXwbxyyRcz}e7QT5D+Vsjh{_$9vBHxZ z)OM05cXj51O3R8aD!;7rxa?(T#>FkGIlfG8kMRq$a{v0|X;1FdV>k2Vj{5wiqRSdw qXqbEY!VORE*^4JUxw|iKk6AS%z%y}GY@nwOA1b})NTBEGZvO|ei~)}T diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.po b/engine/core/locale/es_ES/LC_MESSAGES/django.po index 94e9ab84..1ee5cf01 100644 --- a/engine/core/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/core/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1135,7 +1135,7 @@ msgstr "Datos en caché" msgid "camelized JSON data from the requested URL" msgstr "Datos JSON camelizados de la URL solicitada" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Sólo se permiten URL que empiecen por http(s)://." @@ -2783,6 +2783,67 @@ msgstr "Contacte con nosotros" msgid "About Us" msgstr "Quiénes somos" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrador del sitio Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Cuadro de mandos" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Ingresos (brutos, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Ingresos (netos, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Devoluciones (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Pedidos procesados (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Ventas frente a devoluciones (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Devuelve" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Aún no hay datos suficientes para el gráfico." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Enlaces rápidos" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "No hay enlaces disponibles." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Producto más deseado" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Aún no hay datos." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Producto más popular" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3001,7 +3062,7 @@ msgstr "" "Las dimensiones de la imagen no deben superar w{max_width} x h{max_height} " "píxeles." -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3010,7 +3071,7 @@ msgstr "" " XML. Se asegura de que la respuesta incluya el encabezado de tipo de " "contenido apropiado para XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3020,18 +3081,18 @@ msgstr "" "función procesa la solicitud, obtiene la respuesta detallada del mapa del " "sitio y establece el encabezado Content-Type para XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Devuelve una lista de los idiomas admitidos y su información " "correspondiente." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Devuelve los parámetros del sitio web como un objeto JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3039,11 +3100,11 @@ msgstr "" "Gestiona las operaciones de caché, como la lectura y el establecimiento de " "datos de caché con una clave y un tiempo de espera especificados." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Gestiona los formularios de contacto." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3051,15 +3112,15 @@ msgstr "" "Gestiona las solicitudes de procesamiento y validación de URL de las " "solicitudes POST entrantes." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Gestiona las consultas de búsqueda global." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Maneja la lógica de la compra como empresa sin registro." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3067,31 +3128,31 @@ msgstr "" "Gestiona la descarga de un activo digital asociado a un pedido.\n" "Esta función intenta servir el archivo del activo digital ubicado en el directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid es obligatorio" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "pedir producto no existe" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Sólo puede descargar el activo digital una vez" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "el pedido debe pagarse antes de descargar el activo digital" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "El producto del pedido no tiene un producto" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon no encontrado" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3099,7 +3160,7 @@ msgstr "" "Gestiona las peticiones del favicon de un sitio web.\n" "Esta función intenta servir el archivo favicon ubicado en el directorio estático del proyecto. Si no se encuentra el archivo favicon, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3110,10 +3171,14 @@ msgstr "" "de la interfaz de administración de Django. Utiliza la función `redirect` de" " Django para gestionar la redirección HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Devuelve la versión actual del eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Devuelve variables personalizadas para Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/fa_IR/LC_MESSAGES/django.po b/engine/core/locale/fa_IR/LC_MESSAGES/django.po index 07f0c955..8342cd77 100644 --- a/engine/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/core/locale/fa_IR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2526,6 +2526,67 @@ msgstr "" msgid "About Us" msgstr "" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "" + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2727,53 +2788,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2781,31 +2842,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2813,17 +2874,21 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "" +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "" + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.mo b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo index cc07a3fe7f81893da9dc6e613cc32202b2c567fb..f562baa2bb284b5c0e2e4361c42e85a8c6e709d0 100644 GIT binary patch delta 15027 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 ONXd=&W|j7=^Zg&=^Gq86 delta 13977 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 KSjw|v!2baucos1L diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.po b/engine/core/locale/fr_FR/LC_MESSAGES/django.po index 9aea5106..0dc5c414 100644 --- a/engine/core/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/core/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1156,7 +1156,7 @@ msgstr "Données mises en cache" msgid "camelized JSON data from the requested URL" msgstr "Données JSON camélisées provenant de l'URL demandée" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Seuls les URL commençant par http(s):// sont autorisés." @@ -2835,6 +2835,67 @@ msgstr "Nous contacter" msgid "About Us" msgstr "À propos de nous" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrateur de site Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Tableau de bord" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Revenue (gross, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Revenue (net, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Retours (30j)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Commandes traitées (30j)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Ventes et retours (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brut" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Retours" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Il n'y a pas encore assez de données pour établir un graphique." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Liens rapides" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Aucun lien n'est disponible." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Produit le plus souhaité" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Pas encore de données." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Produit le plus populaire" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3056,7 +3117,7 @@ msgstr "" "Les dimensions de l'image ne doivent pas dépasser w{max_width} x " "h{max_height} pixels." -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3064,7 +3125,7 @@ msgstr "" "Gère la demande d'index sitemap et renvoie une réponse XML. Il s'assure que " "la réponse inclut l'en-tête de type de contenu approprié pour XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3074,18 +3135,18 @@ msgstr "" "demande, récupère la réponse détaillée appropriée du plan du site et définit" " l'en-tête Content-Type pour XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Renvoie une liste des langues prises en charge et des informations " "correspondantes." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Renvoie les paramètres du site web sous la forme d'un objet JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3093,11 +3154,11 @@ msgstr "" "Gère les opérations de cache telles que la lecture et la définition des " "données de cache avec une clé et un délai spécifiés." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Gère les soumissions du formulaire `contact us`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3105,15 +3166,15 @@ msgstr "" "Gère les demandes de traitement et de validation des URL à partir des " "requêtes POST entrantes." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Traite les demandes de recherche globales." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Gère la logique de l'achat en tant qu'entreprise sans enregistrement." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3121,31 +3182,31 @@ msgstr "" "Gère le téléchargement d'un bien numérique associé à une commande.\n" "Cette fonction tente de servir le fichier de ressource numérique situé dans le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid est obligatoire" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "le produit de la commande n'existe pas" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "la commande doit être payée avant le téléchargement du bien numérique" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Le produit de la commande n'a pas de produit" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon introuvable" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3153,7 +3214,7 @@ msgstr "" "Gère les demandes de favicon d'un site web.\n" "Cette fonction tente de servir le fichier favicon situé dans le répertoire statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3164,10 +3225,14 @@ msgstr "" " d'index de l'interface d'administration de Django. Elle utilise la fonction" " `redirect` de Django pour gérer la redirection HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Renvoie la version actuelle d'eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Renvoie les variables personnalisées pour le tableau de bord." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.mo b/engine/core/locale/he_IL/LC_MESSAGES/django.mo index 9ec719127484d85dae8a8c8ceae6e070c3ee9926..fa608b54ea9cd913e2b63cf0e87e806cf058866a 100644 GIT binary patch delta 15150 zcmZ|V2Yk)f!^iP+Ywr-T$F+k<5J94d*tPdAk%SmYG{b0dt*TvOgi?Etwi-(5(1DiH z(s5g=+R{O*L$&?u@_fGc9RDXzU$5u)dL8exe&=`Q@7^RnxL07_!h*if%H&^dxUwHG zrV8#aYfMT$V;-!pTw{J}ZVXxGXB_Dkw(wIV+hDC7-R=_z}5!Yh@Jd9=V zIMS>+kNNQ;&NRkn{6y5iz-VKFFdjoN9arH3EQnQOY`xl8gmeVP(xGT9P5RMR#?-(i zSP!4UO85~TW^g|vO_^P7Z2Mne6wf!m2O`EaYO4%m5>O*vhZ?~%SQigrJYL3X*gDpj z8FXMc_P|T+jA3$2XnSLN<0$+M58^@G-NBe*)EnB-7@9C+Ix#>Wk)1>|C9OK!k;GyJ z(tWWUPC$)#4r->BV0p|zb?{kK{liEf%z1p32L*LuR!P6t)tEt~>pf&ld-Qd)?Y+^R zxEel3L?iZNFn*6U(Dbk!tBJ)))`fm+qIY}2C$ui>hQO2C*{vo58|0-nENigOYj7wx=QP6x0 zk{*M%Nv|2px{+R(Y)n@gygrT*lMbI~JNRabF_XwoO*7^Q`Bxt?=5fr)u&1PImN6x0 zrw+0TCKBu6OdpX@B0Eu==UvoN6q;<0O%>Gcj=+4_4$EOj)YJ|~-JgKrxCFJAj=S;` zE`1sqn|TLyYMM;3?fBBC+8Y+4_QEpMCR>YdP;ndPV`O6=<%EzwVY)H(aUIshH?Rrb z#Ku@~^RX&!alVRb;0i`zA(l=v z)f#mg`l6Owb1De@(DLP_9 zl7msFU>=slwXS>@K1TW&*1_g;?C~6qTKmx$f|F2h#Q9j7=bLpzH1+#1&~sFePht>$ ziW=c9S6*PQ%@1+bMJ-ti)Xc@9IyeHo_y{(@Y;1}zqn7L^^r@icJp14ts3{wPH8BbG zf?43om!US}M$`kJbLr!#&3Fzq(hpGge~Fs%0*~80Q3f^8%BW*r=W*s=9cbbz3`aGb zgqn#-E`Jtktrw!Ed?RWK51<}+0`;KtE`1rjq;H_!D@EtqO&*LIUM9LH#g4CZldhK|MGNH3RdUYf$xfV;y`MwPe>&OL)hX7kk1ki5J!JW~k?O_7PD} zMz{(oSdsK>=XzIu7TlbKStqo)B`Flwj&5fO>t{1j6G3%U=S9=B&>mtpvqUG+S!0j@FJ=M z`Io3;tba)&v1Bws^*9|hvN>1~SGn|hRD%ax`UO-&Z()7Bh%N9h+=0!O+WMDJGj|P} z;ax0%;mcSeo&RP;_;O-WP(9p(TI0(Yiq}vhD*mK><%XjkGywHpSc;n39jK){ie5a2 zdLR6N8c>ntflqW(87Gq-hrSddpA%7!dakfj+#frUPC$)tFKQ+ZVQD;$n$mNq4(7|Y z9S*}F(#=ryI-)u{2pi&)7=g!8OZr_l^WT-oJu=#0*Om5x3$O&~Y%GJDu{q{qBfN=` zSYeg@RP2uGNN?1A)37o=;nLf%8tH@B4BtbwTVOTwUyn$I)z()o~u`4Y(cE-f2{OH&7iZlw;eg>m#D6>5O{eWT2*QDr)T( zp*GzPmwpC2lYZOfmtJejD`83UYoXd{isi5cYNS0e7~`=5W}#-vx6Bo6K&|m}7>-9! zBlsGJV3Bop2@+7d{V7zvH&J`%7gPuCq8?cIDSMhKqaM@{t6(&GaUh22{7)gG8@FR| z%tci^ftso-SPB0^b+G(;yUD5{4VVbjNQYx7%)pj77t7*HsCF-4G5ieG{!Of`^IvF# z-OaU7$8Lx-9yMj-um#RQZN9^(O?1uWS9scfPw0)BvDMfIkD?w}bffJ^In+!wL@j9( z)R!0&LqrdXLrv8{)Qlv${0!6xoH&vb`3YBk4)uV~up)lr@;#gE`=ShL z&ow}w8XicbC?;SCrlK02hnm{uSOIsTHs=Xc{fnsg!xhwh-=I4Fw<|Bc*`AW}=q0}k z>X?p0Em8Jn=3fn-C8IiC!9@HU8{p_IcCD78Mzj}IKNrLCBsRx8*d7~hwGF4CPRVZ6 zp7{yY!QW9GF0su%ulzQjU9%Qs)TCf2*1;Jry$v;mr%-GDIaa}t?REy5;xN*!u^+C( z4tNW@V$&UVlTJr3={=}Tc?PxASA9hEfLo|FDYVmm21GiOP%o$))Qr69yy@~ocG+*u zt+77kQ&F$jt*Fg<5yQ~zw(U26xez9YQsD z9Xn&W1NNughf(RxsE&S%u~_#R>sVC&ZtRF(V|xsHR^K~V|4BsJk&%m9yI-*l#yn>m zn1)*WV^|A+#5x#!(5_)LYVUN$ARLdw@i8okAES=uHj`3IbbuqgS*Q4OBL(s&8=;P0_8{_XM$=Gr%61=KMP#c*tkjW88`XNYVdG8e}l zvYX>O)RF`rwwtOK#*&_fy73r>;kQ^9Lte0(=|R+eNvIjyf|{w1umS#sRk7X?`<#wP znE$q9q>vGX2T%=P!`c{hlwU+)6l&z@s41L*#c(d_^gM}Lnmt$<&tY-AfqLL?sF^MM zqCNi|uqEl9FEamX_z5y9U^aHeeOMoVMU9~PF*|~es1Z-XQkaAJaTjW4_G1~mgzCsG z)If?HcVFF5dusq{Agg>t)Pbi^dte8uBl}S!Jc%KA0afoCtcJI-29|!wjw})jkxsxF zI03cRH&FE|ylgjj3~G<~P@B`YfQWW)4hG{fEQ04zBl;LyVZm4IDTzaE&UvV%I*kqR z4r<1#ziQXME4C&*6E$Nmq4wA{Y>Hz~1eVNao+6?KUqKakUgLKF*bJNFEYt&zU{(AQ zH8S(M?LY+T!Naj3&c{TLG0$TS(&gVY=0(!cs2Tj_q&+qNU~!%Qpi}mpUKMpi3~Gvo zV@*uLe7L~51UWEfIqKMTIBh>n2B12ag`7aM67|4NZ`t$S2ep(V@gg0{!g4&{bU9-; z#Yh}YdLuSL&sly5;mMIWpY#jo?J;ZpE=P;>80?CL-?R2b&Ajl3Jy#dy?x3obMNHHbV(Mo&D5l^-DTDWiibpRo~n@LYTi z`+jb}!Ib^d8is1H1J=X|s6Dg{bu3@Q>Uauk;n(;e7QJTee2w|PO2#}gG*yY$Z8{q@ zh3Q|}H`QZUmh?8%$d00Zk?2R&Tk?%P@2jx^`3JG~1B~NaVW@7n89PE<~;Uc5IBt zuqb|q(LCS$Mx+%PjVs!MiOwm`IhaWKQhb|^-A3*5mnwS#Yy2&iBYn%6pWo-sV<44r zCvL9h34Gpnu3_D1>I*5(*PdI0K}E=Se7&nt}CL5szVI`~Y>|PpA&%=ZNV3N)0@|z(~T#Py^AZihWS$ zItjH_OHfO26eI8khGNBrw!t_oNqR79FO5YFU>nxK{ip|D#8UVz*24cZ^x3Jb!e1BE zqxz^3v~ua8&WWgx<(a6Fj&{)Ku~77DkPMBNyIDsPAyQFGKtJE1x>(UoVRW^@+nzEv*07j-;+uMmkM z@(HS;QvBJY23ALnxE-qDp{Vj%s2i7K3EYR8xffA0cNTTuO_!gqu`Lflb*vsfgpDy; z=l?MxTI<88k$;MPutXD2;CsMG)Pwh-MsVDvFF3zIJ@{u-$AX%A0w2Q-QTKI4l@CF^ z!l$A-yc9!p{x=b+NycHUf*%J8SX0zFFBWMZ9D^D`Z`9Ne!9kda`X=-eYAJ7EXY}x* z*VK1KJ#Yl7JPp;(6Ifa2e>o9V+>dSW1nL3zup1VQ@|Z3-5OwZ1p=NA9j==X(Up$&L zw-4%tdO$o@$MG(`2=$zmsCIUtPw(l_cX!l=1oy*@*BdXlWp8sf^ zLOKbPRS!pErw8p!?L;r>gQz9B=+X^Z+ktdLwLchRF&#D2xve?>n(EtRs3U*7iWS>< z0$)fXQ9Yl7nt>Cjdck}h8h{Zv3Li&J`PZmT`Xh#7fmpj2!ZCvMWL$iKpnr?F1-!)#pEFN!mFs=91-UU{IJ>++mc?1E%1G3vG#Te+N1J)E`0>Mll}!` zl^@%|eoDsPj7?b#B+78s3N6z3*Xpyn=f7|BCG}e-}HTPB@eF zY}Cw|uJ*ms8+EF-Vo{y{ABcF#xQiM=rH5?8jZq!zg8GykiW>1e)O+DHssq0{OLp@F zeo(24+9Q2X9Zo@YI2&u?ChUo?qnGEK(%tRuY>N7#&>gk=*PuFd2sIODQ0M*<>XdkT z*sor7P*XYq^`Ob9sh^AeF$Y`X_ZWk9dfMlVLSGj$_7VxhUr@)&+sigM3pIkpsNMP; z>H#mh^eI#a-$gy}E7UQ&i`t~Yy=}*vqRQi(15q6cOGyw(sqmBX+j=^3bzyn!0IAGN9OV0(-hY6p^m8fh-7{H9CS8D`VN zu@BETIYdug?J)^>0Y_t0g2!aw zS{#MN6FnvcQ}AKDjENYNe-tq$`i} znAx}qS743t9y1MdQRR&$*iXrWs0Y-aXgBRH)b9TRbxMk**i9daf$#raiRk!cpdPRo zwZBxeYa<$Hq(cwo`z)F@=mB5W?&@lLA_e9V0&zuWgjpZH51RE_Q3b3nH)OV z6ZrL9DwZZa85`gNACV?Ra#3Hize0VQ6`NwedR0Q5iYU~pb~@@SS2k+K?xNlYg{Imy zuZwL+Z$~ZBHPiqrPP3<_H|p3fMlFeNHxYfa$;GNz@KM`9ZEQt40W~9=P{;8q7R0c} zYzHDy>2|1wySV%$tVKElgD?j*^}C%{keTwCGSh8OdgCA}3`4D1E=J%zjK_!>c9X6^ zFX=s~^M3|IvA|5bIm1yM?t)sH1vnhvLA76>C0F~iv4hV4IU<_kGPA5hP@8BoYU+N# z-B@R~UEA~6h;;EewxJl*UYU;*@d#?_YtOZx1w*k0>7}T8&!PtQx#amKXrAq9EP6<< z<)4eFeKF(#8Y2A=>f&gd3WUAH^_reY{&~`yh%*u9dBSqyPY|LhB195iB3vhb zDWR`xPtP|^NIXV(khs=TS2fZjTqUKa6TgE`5*{a%B5>NwlLTGiIGAwICe6>p|0a~? zzH3;3@C5P3uFaA-PwW3HH*k#2dcq1aM-lYe^x;!D0PkOXV+ve-aWUa(SMVHuN4f%a zkK-KDv)z47@iuvHkarVx9QUKHIu9`Z*+kBf5rz$2fePb@mnZZll%kQcgx-W(r03ur zJV`iB-C(?j+AnMm^D^$iQMi`y8S&2vVchp5K^t=**3|qLBk)2BY{Dftm;${%R}l9Q zLJ1F&m!Hs#xGw#dykG*~rp?!+kKqX{M&1Nmin_`W^s&8N33qj;ZYhG^H@<89vzWkp z!p!0(cVA$~HzrS40$~CLeC`CU2e2Qp2wX$RAbyPS1o1)C%TJuwMBu+%5)E7*kp79- zr!GAM$7}sRrJx@n?^TGztArTxZ@Ge1#48h?%Tu>AWzQ3m3HltkKpF3qz@@L)=LkDV zN6@MD#9ty*ygx$XL0W%ZmB?&Q#TIziW(EE|>l$m0ylG7q<(=|0P=#7G^Q85uR*S&L zhgpCvF`IDz`h>{qq-!HTmzZolKblA%TtkSWvB&c?*qgk?q^lEV5O$E(b;C6pPu_e& z8`3w)=c_~DB@<2jTUF%RM4tZFtgaq}C4m@wjy#{A#0o+Y5`6Xqu3wOsm>EM}0=6Uf z57c$UxeTk@EOP@Z5xSD64@pY$0*8lffk%q4Urlp#zd@L^*PQnm^oA^b`_@b@2m zi0IlvhOQS0TZvzB=|iNw#LE#T(~z#E#6Q4xI1-b|e;otwed6T^qbbwXi})W{iM0NY z@RUHV{R2h;jsIf`^vU!z_96@;Y#`|R6BnX~8~YP~gHWINRadS$-?})TV}ZYtjLcJ3 zg!m;wRqBo8K3%VpzDwY1r|}IX<9k8_!We?S3+S2^_}Bj7X(jRBsQf*l7NI{4?M7WM z<7m?Qqr#(vs-(N)Vah%x{6Km?mcg&^Q9>vojyina`2t@UOHz3MT1LTJBtlS^*LmC~ z&3~ME+2-!=K;6QGxp@m+JeN9SiFc#?U5q7NLHkc%pY*2{T`88pzfJRWDwOgJ!e4pH zA0T~!^kl-2Jatv2tV>sPj;C&0@_!-Jba~bAwASoRGE=E=7GqJ@-@pICx2=7s*zYYFFye;vE2=fU8NG~G)LE^f; zBZLQHy!Tx@ain92AH}b!H{I2J1xsuEueck!Iv2VMBXA#iQ(QwTP9!fAuMl#GSD~zx ztN%8>NvP}66Y(?ZrBSCOzDs($E31z!$lJlspMgKOt|sw~D{Sr__#1gzp2rAv$!kw& zExCmJ&16C_(d$J^S_d?mk>gxmvH~;!cD_m zqAdPS*yGZE>JKJf#HI66gZmnhQHMJBudj%=Afyo5Qm$(>!52nGT_P=&^RMe6(ygeR z?_c??$!oxUTgktir)(&BhB955#ETL?MSPmeQ~pPU{)*Vk?*B*=$kw_?-Sob=)sMt815Q) z1b32NL|9EjNu(19#fh&Y?>0eKJYhNcKL=8|8>8a#6^_qH9-S7So|yYt%l4k2@$so+ z)4UnuGLyXVi7De!bF0VH%3q*!dRj(CZo4+MON91F%gFRjN}H55F+SZpDLpMQDS9()3Nr%t}vnl~z{Em|iU*DFWlwGMglwd6m4AcRzudpq zzuVg(unak+8hhI1{&u=S!9v;o-88Tzx7zuv(p^^3#A^Re>T%C@q6!)#saQXsmS+g)eF4IK((?t(pJ^AP{jUjG`} zUS|jNzjZeHx6qY!{#{;5{@aGvzg}&7>ESv$O%q=AkJe}@JooLZQ4iFkuWE5KrF%7B zTZydTE+tuTFI89jpRS+#_ZN3OmHyS0joi#+sye$t5j1g+w>LUHw8kjq}?bcHh%ZlbS4)&B=x#Mb3&ga3NhHId4BQa$? HPfhqAoy{pi delta 13965 zcmYk@2V7Ux|Htw36;M>1I1mT8Q9;B7E&)R;{TjG@SE#(o}S_F*7#saRw3VHg&`>KKA`u?)7w033qF zF&(+AnSuT|8)q2fH7}CU1@gujQxuC~Nvwn`F%I+MNmRRYm`F!{#EQh>jk!4{VJMEo zy*$i3Y((6onZ4dbr0-^-^RQ2^F%QV-38UhTsfI~707qa2{1T^g!~bGC9G++leKz}= z8`BYQ;eAXdVJ$N!sIMLIXOyZzE#_YkZeVGO>(5pX-l(_l; zWA0+gKx3jQj~k4{!|_kzwL^^QNxX2VF{xbdmtj00ah;L2gGbYi8AtiJ(Tx9oDz1)Y z!C+>FF^rlC8*dlYNYq>}N6py@)GEG=8kua2z#OcNMJL#yO+eMBxVSCSH`5Wdc=w{F z{JwXhJ)zJfJ4eN_02Sr%2o0;FA3eP}nFUJu?J368!17b=Vr_*n#AC1yZbD7T8Pu-0 zh?OzVG<#k(j3n-es`pNJ6>nf;3Ql1t7I>bUU{z-_>c#`mw~ep_@nO^={SGy9x3CB{ znr`0@saT3Q4Yh`bV|kp2EOxJ1L8co8uOjQm{DldaGJ}M3Q7@3=SPL&>Fa|Ppg|Qr} zz82DV6OUE#1Jtg`#zOcDmc)Cg_625YN(su7(YA|5U(ZoJPDQ^@9JL55 zp>9~;#R;gzmWF!L?pO(jqK14vYE7(0J?KU(h}+Stp6zuFvQZblf$GpbSMEQ@&UGQw zkXJ$tVGQbqDX1HDa&bQlCmxNu@e=gMHK+$%kGlTra~OZk$sP)HffJ}jbslxXZ>SUQ zplqV77CmmyCM66?K9As3-aw z)#K}^8$UqxxWJ3HL*b|k)j_pOLUp{Wa~!JU3$PNtg1XK@)EYRAnriPwGD&29#=02s zlAVfP*noIA>INH7Pp})+;lmh+XHje55^7Q1z>4@624d;?_B!DhL);bBftQeudChV% zi4^Qb_4q#O$?`6+t2zV~hoLSQWxq`C|qzu{}DA8shJu=dM#B;rsPNK->T|1)Z@t&R@>>S0}Tc0{IzgsDH!qSa^kvBQcz~J*s>x*1^SC6%S!$ z{0YM_aHU=K5vc36MV&Vq)scl5jyqN|{u-JuDe%V!SPY+_=C1H6yNGI_;=0%h+qv>p z&JC!kdlPk?eW>mHA?iubVle)UA@~S2QpLTiZACcdrJz36#wMtJI}&@~Vr+;xsMTI! zjcwN&wVEfRIxrn|!$nvGH==H|3(Mg_49ANYiQdO#bYjF>yYFLB4O37M+*K@U{J*{BP@gU#>;*2U^?+79+a4fP^a`R6Wvh?<(1ZMI#1 z=W)j$r%>B6&kp-Uaj20Qj;-(&Y>wAlT;(m>(NUO4 z`3~nzS04GcF)b(`iOKjbCTaiQBclt&?zD3^1>=biVIuy6>S_Et_8mVSs}irlLU<4> z;g_fv(=F_cPq8re-etFUItCDXQRmIW%G&=c$mFG9KStvrq-W-qE01~C*2iH1$`erU zi#Dj;&=-s1I1I#Du6zL&AzqJqL%xl*@d!rYpLl}%oACGe2*#UO9mnprQ?dqY5PyS- z_z&vD_$<4qMqxGLOpL%!unFEkjabz^cBFb@P2!nY9^XRU=Qw&3$lM{LxsKUuFFXvZ z5U<3h_&(~%@1us$v(LVu@}ah8FjmGWEQ@IvgriY6oQfLRwU{4|p%(AieT=^@TyVdA z!rBewy2SL4mDz1us)tdy*Kh4 zv`?OhT4TeoF5W~97WjnM zw1;z1Bed=?>xcLtY6K@AvAbqAvPQgSC7E(mY(|}M2sK36sFAsWei-zbwJ5T{O$jWD z$1n^ppgQ;n*(j#;=k|stun_ULc$SV_$9Up>U+@vF{r?vkz1g}SWS}S6o!4x=Lfb!jobx%!VQa_vVW#4bcSD6C_j1DnEn|04b$wU z!89^=Dfs#vFBjrZzqR{4&v`yrC{M<`81TKlVGza<$6*D`K#kZ^)MCvhq{=yQ(|Drk?e9itjuP&;?IoBEgn%wY@>+Dl{RQ6|MMiD3G@XBN=cK*t0CjRUu zdmbPC#&0`#>lQB+ob(58J-l;=tI>Wp!}vFG)_tak>%H@kKig9E@NfRyLizQ_d}31G z{U5tKetzm@&Z($uJifnfZ}oW0x5Rn}Fi-W1Z zg2%a0Qb~_*(FK+E_@*KbOHtp<*%{~3v2@&uf0Xg~K5p0WXVW^gyM$V_LFGNZZ%p1e zGD#FHLiOwv#^Oax#Nrj~iO-^5EOW6ozVG}MI}n!+^Z4d?nDYf}O!*tAU6YM!S2NtU zn`-r%Ofto&IN&^i>d0jb#~cjCz=})-mct-S!E{W+-gppuU}z=wpQ0FD0I@B3;{z&wF|9_s0E-)X}a5HNE?nTYjWz^gSR`d8iY#Lz%@d(rfmt$ev zhFVMeQQPY-R>dc%c9r;>dl8Jo%Gesc8p=^*)T1e=Cs^p>9nOz1gz~RZPnLtp=!vj5 zYJnP|_E;ACp*l3p#S5HUQSClOb?BQ2kJtC)Hz?4BJvHo;mPHNiGpILMH)mhei9=ld zG}IHlfO^u^s3-r()qjo}(bK5&esb~OsBKxerq|>9=2L^WkS^2@E8BQc17f6*dtgsm_QHT0RN8}4-VAET~w9$711lTAhqpI|%| ztz&P{0W|_Wu{CZ*E!Nwp5qpAtuyTxj;#sI0ZA9JRJq*JSTznCApX;dWJivz9|NeFD zoHW79RJ?#{FsPm#(s8JF`$E*G-w)UWuj5c`R^Q|Ms`WbR#@A5W@Fr?Xt2eOq-LWU} zYE;MWU|H^OiZ!&WKMJ)kTcPGK9ku`G<7C{6!!atB4=Y@anu_}vj-EI>C6!R|RMdm4 zL+!3@n24XEM%u3t`(GDGBBOoV4%Ki3w#PZx49}uQplD;;ZV+}M_F{kh7WL!}o7lCJ zfDy!9P-|fZM&nUjg7;DF=QU;j>qBKpQ@fpxptj!`7vDvFwemExA0E-D)$YX<+<*yq z9b>U_ytNl<3RbxIl#BBvczj>Mk};9`r3vi+#$?V=pbG>gdVJq(Qc&?MY=G}OZ@coU z&F!aVAJmgj3HnauBuezeDZY zUr-l*jGEK%WV_v>P_Nn+*c>~f9%wbrz%$qZJEqw8$|lsV`V%$v-uMi-4RA^+BPBtlX9z9wpyq@liIO+-D(ho~DJMGgHo*co#$4x6Uhk(r3P z&%4-K`~Pn;krX7ivD<1K>Vl_HPjCq}SEjAKL4H(R3e~|d)D0V;9wZgDNC%;&aJH*o z?%awR*$)(J|9?eBL!OO#f`_P~3V6nrN1!^Ai1ly?>V}!98|_4WGx`d{@g8aym278U zK(VMP9FD4Aj(Wf>^y&!?kx@_2p*rvrM&KRPP=~g+pH}gx?e-k%f(KB)x?RH&_!RYf z!iWyGem!cWj-onz3iX@Ob!?5H9ohdA$qedfFMI*@iY$|6Pn>|^#M4nd-hg`I?apJU z#hBybQk`sl17~MUq<%c=O}Yp5pxLMn|DoT%biuT#8qvDA!ejC$>bG)viQ8$n8-+ablb1L@ZGx!K~ zV$1G!6;DUKG54Wvd=quUYCUWRhGI+N9jGC`gYB?!Px~r<2{VXK<6!hA^|C|pChBW* zvEKGWW(xKvzUJcOKK2dvHV&e^VqXuxKJyO8@%StD$KL%sW;7nezF4cjz0m?(NPHWo zdgW64-Q0;c2z7HHgy&-Q%?f-yu`{`E^!-%6%4LYFqbvkNJS70Ju#8p^! zl%2ZwP-~*>Xgk*(QRi(yz3Y!+EEXSQ+qFUM1}}QGxZWa@gx64usp?qU(;=w()udbLK4vx{yv>IO$qBk?b44K&TLBe(0YKJxP`waGf3>m-w*ss|QP@iVK zFce3ko_ro^&c4E-cnu3->Ug`~yP+1cVSX`ChC{d<69yPY!B|9y+5Y z+mRaRC8M5f!fyB$YR>$gvtOAy-~eJTYLQ;WaD0S%qR=Vss}^c;&Omi|Ehgjl*c;1D zwb!45y8anVL2vnKc8CW$w_`gh{y@!r{PP~O4JV@Jw!(D#m8>`FLJLr<`a2wj`DWOm zpMd%-*nt)C3aZ^xjK(^QJbF!kGV1A4^x#LN9MV$-9D#ZGXH%OsBe5rOURS66--Y}F zQdP=(khJo(hCU~0WWS*_vMf>;E|?#u;9FRb^b7SKoQi93CUrUrJ7+lOQI|;45#`FX%ZgCuPkNj8 zkKr|J*11M|kavskh~noeoAv$d$_4IH*M!uF`~=jWQBS)z?_y=j22%DP(h65zihM`P z-*9njXFJM!u;_iq5Q3)UClK+0=Q~22e-rtWf@#y3RG0G7q<>w#8nd0vRb|{!k9M_4 zdP#jtU3v18TwNsj7hT@Ff=afw?~j3ZFqMj7q#NWX&`=-6xyK30^5zEkGcoTg-Fcb5Uy1Ns1k=KWi zUOqZPNzEzqP``)#Zt@?Jj*@h2AWc)o#mY{kt-j8Ep!t8DivB9)_=_}_$_SN_ej$}5 zB~bnw{z%d>fHqIDAMtWhFJk=xyE$bCT^qF<|3CSyD&QDK*-NBK3b?=V=R|#+hEjMN zdA0kFs#wwGE7GQ#EjGQ$?qBmnhR`eJxT8ca25V1(RBm zdQr}=WnS|gfsXN{t}Y+W2``f`<4!zC-9}OvW$iG=wVO#^$3MhHaF}cVBl)jMB`Cj% zI%ZSXo^+OccgjonN;Uo*6{yId@DfQMmj_6*N&h8oLfujFI=T^mPdZQjdCCis|BQSU z)bR{ubMQUlH%XhwZzhc({YlC_>bdr@+W+G@sUkI_NPLR={tM>6Tip)O!;P_Yb--wE>q_q^JxL)7$ zRofr$!wAZ&xeF9^ZS?JD3uSXit6kk^xR(?_n~8Xf^d;>s*h~4o(rqJOg8FP<8S|gV zU2r>%b!bVXlMlv%D&R<_%`5mH(g&pd)Hk4PDE>kGnmacIZ@YY998P+f`T$Z_(pMxM zwMnVe<#FrJSNNRkh=Mmsk7-bnvODCXU0o&oM-AN3m^M1PQ67dLlbY!~oPqmDLDY@G zvXrHea*t(Xyf09pBh6x3(fC91Pe|)YYe<(!I$Bfrh0Xf@jaS*9Nc}0-vD@4Whl*}inL17#xMP^^eq^3dkc?+Y z4ag_qEK(KH@5Jj#H%Yli0rHUq$4Sjd>8>J_&U7TLa&0qRx#&QOpsq4WM<1!@UrOV9 zq)MbQ6vj|ij-=xxX$h$hb&1q%z}ln>BpuOsg_K6BNnDpU?~sr7)!HA|VH9QAqDpTLDKKN%m=?l%|b(o~&v!4N#HkLL$Neew$w;Cq-Wi@Wx+>^DqNk#vxJqeWyEpJynYgoHgo~+;wQ#@H~J1(lS zqR7h?R&<}(b;bFKbyh@ADxKA5l3%C%8_q93zv6u6`E6@50zB2TwjSH!S#!9)Cn0O& ziJEz{&Ym7$Y|ZS}p5iMuU#phY`g*-QSzCU->&e=k(\n" "Language-Team: BRITISH ENGLISH \n" @@ -1072,7 +1072,7 @@ msgstr "נתונים במטמון" msgid "camelized JSON data from the requested URL" msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" @@ -2645,6 +2645,67 @@ msgstr "צור קשר" msgid "About Us" msgstr "אודות" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "מנהל אתר Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "לוח מחוונים" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "הכנסה (ברוטו, 30 יום)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "הכנסות (נטו, 30 יום)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "החזרות (30 יום)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "הזמנות מעובדות (30 יום)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "מכירות לעומת החזרות (30 יום)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "גרוס" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "החזרות" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "אין מספיק נתונים כדי ליצור תרשים." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "קישורים מהירים" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "אין קישורים זמינים." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "המוצר המבוקש ביותר" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "אין עדיין נתונים." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "המוצר הפופולרי ביותר" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2847,7 +2908,7 @@ msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "מידות התמונה לא יעלו על w{max_width} x h{max_height} פיקסלים!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2855,7 +2916,7 @@ msgstr "" "מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול" " את כותרת סוג התוכן המתאימה ל-XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2864,41 +2925,41 @@ msgstr "" "מטפל בתגובה לתצוגה מפורטת של מפת אתר. פונקציה זו מעבדת את הבקשה, משיגה את " "התגובה המתאימה לפרטי מפת האתר, וקובעת את כותרת Content-Type עבור XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "מחזיר רשימה של שפות נתמכות והמידע המתאים להן." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "מחזיר את הפרמטרים של האתר כאובייקט JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" "מטפל בפעולות מטמון כגון קריאה והגדרת נתוני מטמון עם מפתח וזמן המתנה מוגדרים." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "מטפל בהגשת טפסי \"צור קשר\"." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "מטפל בבקשות לעיבוד ואימות כתובות URL מבקשות POST נכנסות." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "מטפל בשאילתות חיפוש גלובליות." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2907,31 +2968,31 @@ msgstr "" "הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " "HTTP 404 המציינת שהמשאב אינו זמין." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid נדרש" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "המוצר שהוזמן אינו קיים" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "למוצר ההזמנה אין מוצר" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "לא נמצא סמל מועדף" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2940,7 +3001,7 @@ msgstr "" "המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " "שגיאת HTTP 404 המציינת שהמשאב אינו זמין." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2950,10 +3011,14 @@ msgstr "" " אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " "של Django לטיפול בהפניה HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "מחזיר את הגרסה הנוכחית של eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "מחזיר משתנים מותאמים אישית עבור לוח המחוונים." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/hi_IN/LC_MESSAGES/django.po b/engine/core/locale/hi_IN/LC_MESSAGES/django.po index 1463c6e9..23915302 100644 --- a/engine/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/core/locale/hi_IN/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2526,6 +2526,67 @@ msgstr "" msgid "About Us" msgstr "" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "" + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2727,53 +2788,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2781,31 +2842,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2813,17 +2874,21 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "" +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "" + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/hr_HR/LC_MESSAGES/django.po b/engine/core/locale/hr_HR/LC_MESSAGES/django.po index 07f0c955..8342cd77 100644 --- a/engine/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/core/locale/hr_HR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2526,6 +2526,67 @@ msgstr "" msgid "About Us" msgstr "" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "" + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2727,53 +2788,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2781,31 +2842,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2813,17 +2874,21 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "" +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "" + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.mo b/engine/core/locale/id_ID/LC_MESSAGES/django.mo index 2dea875ca4279ab728f0d8b3f99d5eee90fb62d5..635fbbd7c54efd18fcce93d8cff21c8e4c5bc1d1 100644 GIT binary patch delta 14927 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 HZ{Ys`%|7=- delta 13945 zcmYk?2Xqxh-^cN}A&}5ZAe2x-fRF|xA&^iLk^o7N5=yAjq)7xp37`m(;*(LH%GPB_-fm}SHz9yewiZs^N2aDm?aS){~u z2N?4QrVlix0p&@9ka!sWPP}xmF};Xq4>2Z_>s=Yj0}{s$w;ep3Ys@IhM~z_ocT#cr zX%-AF8*L1uW@6L@m;9Q6qN? zOJkFXc7MpkVB&1l8XAVxFb`SmUbB!)cM4ud){nV|$(TNggws(Q$We^O^B9DIOkF9g zimH!B`fgfc9sCgW)?C7pcm*rqT~zyGlQpFT)yU|zYkKt>lni2-;S!|)pF2}(@0_2p2D zFbs9W1Q#cx7F#yzNqb-z4nYn1%cwQ+8tOq;V{v>3z3SO^*WeQB!q-q8y6ejQr`fqK zi5l`S)DXs@ZkUd`QD+zT!%*T8s2jh6{ZMT2%i*op1wn z!X4C&AEHJeaJsb$s(lP<&Re0TW+-Y3$GiGhQB$%W)$v`Z`yQXp_^T(EU4uJVnYi!_ zYYkL=6V!>Bs1EhP7#xIJl=D$H-0R}gsGZfkXg`FSpdR2^)B{X)F7lF5k2jz$uoLw} zU!Z#YBkINvP(3a-({?Bnb)i^PyHr%ibDX149iN3^xEytzy{I+t6>6%zXUU|J`5EIe z;w3v3y|EGTFw_lJp`KtXs>25{5Kp1jz&X^Sx`s9J9tL8?m+f^zF^)I~)q$6gj(N=j zGAR^nNA>tV>dA`Cva7lhDz1ULV4RDaVo~D9FcNbx5hvrDxC_<3?`%7ALotDPA{NH2 zn56fA7nx=h+(GrQ-W)r}{V;-fDC&vkVK{C@-RKNzUno1*4s9fA>Y8IHW~26lXHX9? z7u(}%9E&$mpFd{ME4D|cP(%D3w!y2YC#?Uf9f>5=g_2QIla1=&OboyeP*bxD)$S;& zqvtRhgXY;!%VgA)K8@Z?GSkSk#1p6+mY8qnG#IsLYGY$e#CkXq8{$eVgkPaLavDqG z-xz|$7udKiRwr(Rnu4xa4qslt_}3+~k^=b&YN&5uH7vEz#xWR5+yPboG{)jwtb_Zo z7XE}aFmRDw^%1D+wL_gZ0@ab(7>XMgG5#8w;}rPg11yV=P;*ymv0X%ws5l{3YN#^sF8XfwJ&VP0KNbF$mm9gQA2eW zH6p*b@&~9VD8AA@c_mbRBDpkCJjsPl4B9h>6n=b_$`6&Q-2qh8aSs3{6w#rW%j z9m(jm8GwUu3P#}-tcqn<+b61zYM+SpF%z{Y$7344kGk+5sJA3$ja@TiP#v6r>hOH5 zfh*Q9{+hEr6v&IH_t~@7#&uCcn1!12L8uNbLyf==?2QMp3s!r>u7%N4ydVqVx8CCU^E4qli3)DJDt~18&k-7J0fY$k*M-z*c1<9BtF6h82+YRtU0I- zOh;XR3+lWJsHrII-C!?VA63v3)o?26!ke)LUc-2-`vO;{ffVLkjEk8yt!x`mHmypDD8>8*B3mS80D z*O-ETqfTs@Zx_{57*4zlBk%w=!)vG!tFz6HR43+rJBW@8B)fx6-IsF7WYMe#G#;yty4@z;fm z@3cEyFlG`rKt1_$sJUK;dV-^p)uOL)m>^@d;&wnPn4XVeq*!DcuM^_Cn)EzZD?>{PWwjm&t|h^@l}Jb~Ib z{Px->PeHA*p%{8PQfg@tg9b3M)?ej7EE z4L`9%*&H=>?T|gk3_?v|nNRJFt72C=5{VkwNr(0Q!OMF|Mo;h)R^d*ij_}7L;>crm zh^AwE;JR+L--jsw@F!L` z_PApI6g&4SPe6R`7j{kB_x_bHro_i@@Vh>ayv6Rx`9Z%i3dC2j80|{`ZeQCf`eRTE z6A5-4t5t|Yh2>!?Zd2XKZm=`GT>gO>j+~{N> zk8i^%=kM|DsEJsX@)5|=GG5f{Jq;V+Toq{X>_yGtbu5B+&^OdLiuiBTpIk>4_V_-% z_7}1BC$J>-r%-c$2_Mq#Hm1_iYk?l$_lOw&A{|TpPz=YVn1$Z`WEztxR>I?Zomycd z;w;phPeyg{J&eP1uDoPPk8k5?imfRhjCy_FbsoiN;;Wd5L8Uytt+ySj-7KruyiKMJ z1&2{jQnIuife{HY9BD=>{LXd@3R24(PW~AxU+Kr>h&6h>gagXT)*t%6{uCe3H4xy zoF`Ea^gRY}e{+M3-s8Ji8jA&ad>cp=)LgYhb!@QnRSYBEjk@u9R7Y-N4ZMe1OBKr7 z4uznuTMsoNEwCJBpjQohlTnWbpyprp3eMy-j1uKqS^g#JQZr%(kO zmqE3!jOsv)D{qb(k=7MFUf&5_DA0-hQBO7kb;Eh6w_rJH=vSkLcr$8aIe@zG=cuVV zk7|Dp^%nhwx{-%%RU=gzwG)Oq6N1@2bi)h^bc0;fR6LLB`8?DO)}cC>kLB?IssrD+ z`pd5T4(j|OY$iIdsxt=Fq2{QOOLLC)lF^67YK+H2*c9($6O5~5FO-Yw&;-;CUO_$4 zdaQ`sQ5`$s`~fvm4^WG+Xl2_z)ES4W_ok9jgRZCx<+_S#sKvC{#oJLMaKw2UGl?&w z7H4!7Ti*>E5)VY(;5AqNHtGSkqZaFD$lCInuWZJgLk-Op)S@gOVmFQ|sEwpE>cmMH zg)d@z+=80Ze^Cz-#6J+}{3z4|#iFJv12sZjUHl|Q>;2ColTO82+<;e5t9foUd*RnG zk$59&QT~7#cmuPsQFXgx&O|M~y%>rgV{QBq8(?4!yX7XKIx-Eb=>1ssCP$RPq^&rPF77K;({%h4I zkkM*QL(N$iY=MKZKCZ*YcnWo)qP6Ukhhj_OXHY}F1$Dihs6~1hlkhy&#R|1OW&pN8 zwO?JE_rDpLH!08@UB(c+>EfbwY+M1=<2ck@4@51pv8bWlh+2eaQ8)4rw`(K@8xePR z@my?0ybE>SU*TT+gi(Auh@hY+#^6-c1>Z+q@QkbXMA-5uOrg9hYR(sHI%B?)VzY~*ecYHb{zFOok0!d4b({f zj(S__M|sRR?1gc73iWpRN85cS9(A5~Fd1Da*EtDw!}+M5u0?IFn^6}yg7J9I)knnG zjyA$Nl&7OULx!WK@+Azw^{D%7LJj?X8+*-dGI~Vus%T+hnR!kkr8A`^~32YVOvdR{JK@ zP#r?O|3^`;)z_%0I*Xc;>&}O$Ck=?Ti@FM`UAQw5^ znvd$pdej{6LA@;xP)}Yc&W>0qR2+snzaHwmw$8q&8|R@$YAX8v{x{22taKIcpyqlD zYRJDweMtR_>Oie{8}~y^#WWm(t5G{%k%qQD8Z}}aQB%?r^_JygCN65o``@0-MGCY^ zV-h^RfBWr=>ftKX6Kp_D$zIgrI_&%j)j_{Twmi(4;_QoBBQIb$?m&&e1=M%PUmNlM zcPEqC*zRa+u_y5#sGYBUqJ5$lP^)$=YO$U~?QoY+i|amWg9=Ns57Gs7!x^Z3WD{!f zee2?4P3#Vv;3ZR+if2$aT#mZnQRh9>kkxEzFPMdDKN{6;88*gGF&Q6WIyP_SF`aP= zYAR2o+WR&4n66kKyP{zBGu|e_3&F4N2l5Hsm?Rb*mPSy(|OU^sI|Sp9Mqcn z0kwF`x3MFbgnCQ*VTj)U;bgQrU&LX!6!pG(+S)lThuWGWusGI3&21CZzR(}zaR_$8 zWv={JEJFMnYVkfmy&WdQuAw?umiwCoGHTEUwc0zPz90;7@dQjIUVth14ZelJnI1D4 z_o1FNng2?YfTK}2+JJh^j=S;-?d+#w7OFlEz3TaLGWwW2;Vkr+{S<40T5P?rCQd~S z<$6rV&rn}hOSZQkP8q0g(|MSIOHmu!WzN6lf0E_PAoIESJxG#+)MH(dE{)E0dV)38Wa`^6&*I}$HO zZA3piy_LJ!-{0G#-sgp=9qO@N(Wnvl4K<`qy4!XGu`%&SH~{}Zja;`L zw%rWWhtX!#2KO0iL?0jz>NT}{+KP_oq2eRbRnor-I0F6Xt<9R@*o(M`t9y=^ewtaN zI+XV$X~AlX{*3B=XFpIZe{>3u(Xdy8jPk0$qhZmDu>qMchYv zjr0@oU!=##>sU+vAZY~oiQFKW{C)BXxKRz+k?%-;F8P8Zi&#ej#*rqty5r7G)E#m8gT9vb$5-q>W)At2 zR8DdgL!7@*mQU)&1&gBo?Dj4eCtab92cO3!IGH*frJR$TGpOTp$9L3oW%{@;O_@Jw z6Z?-DPG*H`v<;ted3|gyw&(hO=5T>OsN<8=G$B6*L+~rt<^!xn*+9ykAuV*}!Q|OK zeE%s$MS6>Lw5Pl$`;YG!Ou#3w8AJ4hE34%Ei!y&w5N(>0;wi64`p4Dl0?(7btc*Jv z(k_~$?e`n%s*xY->SD;xbb0SWDqkRVq2LZ`v(ZL$jrjG0L>t6&ybkk0a?r zN5>PiAB00tM^$WNv%Wp0C~;?3SAudr1H9%5GJPowAPsYk#iv~O7B0g8QV)0H`{cEQ zwNoPw?fp=Xxkb;)cmifqQ6Qx?veC|xWDn|#I9I{!rM6B zom2;Fx_nLAgj1)Z5Bcr5i@J|-Jt@kyD~vbQ2K7H*>yrLUJcW23CKBs-&%*bA3Z}b2 z)T7~lNb^ZL^k?{je_!#{tHrh%CDo2 zsnm5Kog&|Z^76h?jXy_qDn?Uyj?{;E7ilW#SK?;W9VV}%JMnj<|B!!y@{;5~AzvGH zJVx0x+(P^oX$|?cq$f$glM0T8u6?53|7SU=CN)oyCK6XA>0c>cBtB0%MBJ97Bb)LH zca4EHE>5$+UV#`c@5l8YN7LR67C?Cpl&4U z3urp2;FwRw`yv%OvMr`9jrWj$L|RE&LOMs%kwM)NoAv!0ud+Xp`ctlBtL6WHmUY)w z!H+IqiTpdR#Z3E)5W~R*meSzyh1sz|-dL);P_l-St{5vx3n*_zoPss*GzO3=l3z`| zjzgqK@&{bpk9ZNO6R9-qrc<8b>Q15Fzuu%!>UZNrJOBJ9KoCh`5+@ZL;pCG^jY&tT zKTAb((oWJ8*X~#HMaXYK9p71e|NPjCbABM+hw-jld_n9-dfivXk|;#x5d~>@lGKQN zDo!EQCfy`nNxDudIEs;vAvj8ELCSR%Rp?A7(qh+knJX6^NfFf5BI$Tsa(^?A#&=0! zq>&WHQC5|t;{@py(&N;nP`3)}lg^NIG{6g_Y*G|)JZ(0UZ{Vx7KYoO#D7!>zshe_? zA+N*RSwAWK77|HMQqh9=DbgtN&yhM%{t-sGlL<{@;uo+rUL-vvUl|{$lB0*k_s2eE z2a+0->X1s%PDiXC&p(i0yp4T72e|w(obB@C@K4&^aB%_6)kzl&#xLE4Kf`vU3zX%N zJ}3V%DU$Yo5U(ITB=&s?8VTh{)ku>m{0zs^@UpJ~fjdS~R&cyY-2oR&C7Y)}5J#;Jw!n>KCb$)DS-rhopn45%zu1rMt1(DBi%epj#u~8&rd!2vwwcQFPfEFxbl2le$@+y mJ^BA!T;|DNe\n" "Language-Team: BRITISH ENGLISH \n" @@ -1157,7 +1157,7 @@ msgstr "Data yang di-cache" msgid "camelized JSON data from the requested URL" msgstr "Data JSON yang di-camel dari URL yang diminta" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Hanya URL yang dimulai dengan http(s):// yang diperbolehkan" @@ -2799,6 +2799,67 @@ msgstr "Hubungi Kami" msgid "About Us" msgstr "Tentang Kami" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Admin situs Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Dasbor" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Pendapatan (kotor, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Pendapatan (bersih, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Pengembalian (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Pesanan yang diproses (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Penjualan vs Pengembalian (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Kotor" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Pengembalian" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Belum cukup data untuk grafik." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Tautan Cepat" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Tidak ada tautan yang tersedia." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Produk yang paling diharapkan" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Belum ada data." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Produk paling populer" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3016,7 +3077,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Dimensi gambar tidak boleh melebihi w{max_width} x h{max_height} piksel!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3024,7 +3085,7 @@ msgstr "" "Menangani permintaan indeks peta situs dan mengembalikan respons XML. " "Memastikan respons menyertakan header jenis konten yang sesuai untuk XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3034,16 +3095,16 @@ msgstr "" "permintaan, mengambil respons detail peta situs yang sesuai, dan menetapkan " "header Jenis Konten untuk XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Mengembalikan daftar bahasa yang didukung dan informasi terkait." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Mengembalikan parameter situs web sebagai objek JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3051,11 +3112,11 @@ msgstr "" "Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci" " dan batas waktu tertentu." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Menangani pengiriman formulir `hubungi kami`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3063,15 +3124,15 @@ msgstr "" "Menangani permintaan untuk memproses dan memvalidasi URL dari permintaan " "POST yang masuk." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Menangani kueri penelusuran global." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3079,31 +3140,31 @@ msgstr "" "Menangani pengunduhan aset digital yang terkait dengan pesanan.\n" "Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid diperlukan" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "produk pesanan tidak ada" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Anda hanya dapat mengunduh aset digital sekali saja" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "pesanan harus dibayar sebelum mengunduh aset digital" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Produk pesanan tidak memiliki produk" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon tidak ditemukan" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3111,7 +3172,7 @@ msgstr "" "Menangani permintaan favicon dari sebuah situs web.\n" "Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3122,10 +3183,14 @@ msgstr "" "admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk " "menangani pengalihan HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Mengembalikan versi eVibes saat ini." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Mengembalikan variabel khusus untuk Dasbor." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.mo b/engine/core/locale/it_IT/LC_MESSAGES/django.mo index 6158cab78fd8150dc807f0ef681e18e8c47f7b29..37b70222305c8a1c8408abeeecdd99ec853565f8 100644 GIT binary patch delta 14968 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 C$o}O3 diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.po b/engine/core/locale/it_IT/LC_MESSAGES/django.po index 3c104829..5450a3b1 100644 --- a/engine/core/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/core/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1149,7 +1149,7 @@ msgstr "Dati in cache" msgid "camelized JSON data from the requested URL" msgstr "Dati JSON camelizzati dall'URL richiesto" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" @@ -2800,6 +2800,67 @@ msgstr "Contatto" msgid "About Us" msgstr "Chi siamo" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Amministratore del sito Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Cruscotto" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Ricavi (lordi, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Ricavi (netti, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Restituzioni (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Ordini evasi (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Vendite e resi (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Restituzioni" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Non ci sono ancora dati sufficienti per un grafico." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Collegamenti rapidi" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Nessun link disponibile." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Il prodotto più desiderato" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Non ci sono ancora dati." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Il prodotto più popolare" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3019,7 +3080,7 @@ msgstr "" "Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height}" " pixel" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3028,7 +3089,7 @@ msgstr "" "XML. Assicura che la risposta includa l'intestazione del tipo di contenuto " "appropriato per XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3038,17 +3099,17 @@ msgstr "" "funzione elabora la richiesta, recupera la risposta dettagliata della " "sitemap e imposta l'intestazione Content-Type per XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Restituisce un elenco di lingue supportate e le informazioni corrispondenti." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Restituisce i parametri del sito web come oggetto JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3056,11 +3117,11 @@ msgstr "" "Gestisce le operazioni di cache, come la lettura e l'impostazione dei dati " "della cache con una chiave e un timeout specificati." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Gestisce l'invio del modulo `contatti`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3068,15 +3129,15 @@ msgstr "" "Gestisce le richieste di elaborazione e validazione degli URL dalle " "richieste POST in arrivo." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Gestisce le query di ricerca globali." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3084,31 +3145,31 @@ msgstr "" "Gestisce il download di una risorsa digitale associata a un ordine.\n" "Questa funzione tenta di servire il file della risorsa digitale che si trova nella directory di archiviazione del progetto. Se il file non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid è obbligatorio" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "ordine prodotto non esistente" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "È possibile scaricare l'asset digitale una sola volta" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "l'ordine deve essere pagato prima di scaricare il bene digitale" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Il prodotto dell'ordine non ha un prodotto" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon non trovata" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3116,7 +3177,7 @@ msgstr "" "Gestisce le richieste per la favicon di un sito web.\n" "Questa funzione tenta di servire il file favicon situato nella cartella statica del progetto. Se il file favicon non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3127,10 +3188,14 @@ msgstr "" "indice dell'interfaccia di amministrazione di Django. Utilizza la funzione " "`redirect` di Django per gestire il reindirizzamento HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Restituisce la versione corrente di eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Restituisce le variabili personalizzate per Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.mo b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo index 97ab1d0cc42ba674e71b1597242cc51cff39134e..5b9177c38b32220ed172f4f128b35d4412fc9c3c 100644 GIT binary patch delta 15031 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 Ux4t{RlKHoHb8v7m&*m}z0|cPlTmS$7 delta 13950 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1066,7 +1066,7 @@ msgstr "キャッシュ・データ" msgid "camelized JSON data from the requested URL" msgstr "リクエストされたURLからキャメル化されたJSONデータ" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://で始まるURLのみが許可されます。" @@ -2578,6 +2578,67 @@ msgstr "お問い合わせ" msgid "About Us" msgstr "会社概要" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Djangoサイト管理者" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "ダッシュボード" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "収入(グロス、30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "収入(純額、30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "リターンズ(30日)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "処理済み注文 (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "売上対返品 (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "グロス" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "リターン" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "まだチャートには十分なデータがない。" + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "クイックリンク" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "リンクはありません。" + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "最も欲しい製品" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "まだデータはない。" + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "最も人気のある製品" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2783,14 +2844,14 @@ msgstr "NOMINATIM_URLパラメータを設定する必要があります!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてください!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。" -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2799,40 +2860,40 @@ msgstr "" "サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-" "Type ヘッダを設定します。" -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "サポートされている言語の一覧と対応する情報を返します。" -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "ウェブサイトのパラメータをJSONオブジェクトとして返します。" -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。" -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "お問い合わせフォームの送信を処理する。" -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "グローバル検索クエリを処理する。" -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "登録なしでビジネスとして購入するロジックを扱う。" -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2840,31 +2901,31 @@ msgstr "" "注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" "この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuidは必須です。" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "注文商品が存在しない" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "デジタルアセットのダウンロードは1回限りです。" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "注文商品に商品がない" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2872,7 +2933,7 @@ msgstr "" "ウェブサイトのファビコンへのリクエストを処理します。\n" "この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2881,10 +2942,14 @@ msgstr "" "リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " "インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "eVibes の現在のバージョンを返します。" +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "ダッシュボードのカスタム変数を返します。" + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po index 1463c6e9..23915302 100644 --- a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2526,6 +2526,67 @@ msgstr "" msgid "About Us" msgstr "" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "" + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2727,53 +2788,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2781,31 +2842,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2813,17 +2874,21 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "" +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "" + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.mo b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo index aa9daa5062d5105ef07f6d72a0039974fc33d24c..d1e2f581fbda10c72aa7a72caba404aad068adb6 100644 GIT binary patch delta 15004 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 JFXpM3^M7zM1SbFh diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.po b/engine/core/locale/ko_KR/LC_MESSAGES/django.po index 3dbaea1b..f8e97349 100644 --- a/engine/core/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/core/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1063,7 +1063,7 @@ msgstr "캐시된 데이터" msgid "camelized JSON data from the requested URL" msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://로 시작하는 URL만 허용됩니다." @@ -2602,6 +2602,67 @@ msgstr "문의하기" msgid "About Us" msgstr "회사 소개" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "장고 사이트 관리자" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "대시보드" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "수익(총액, 30일)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "수익(순, 30일)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "반품 (30일)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "처리된 주문(30일)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "판매 대 반품(30일)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "반환" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "아직 차트에 넣을 데이터가 충분하지 않습니다." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "빠른 링크" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "사용할 수 있는 링크가 없습니다." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "가장 많이 원하는 제품" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "아직 데이터가 없습니다." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "가장 인기 있는 제품" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2808,14 +2869,14 @@ msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2824,40 +2885,40 @@ msgstr "" "사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 " "Content-Type 헤더를 설정합니다." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "지원되는 언어 목록과 해당 정보를 반환합니다." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "'문의하기' 양식 제출을 처리합니다." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "들어오는 POST 요청의 URL 처리 및 유효성 검사 요청을 처리합니다." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "글로벌 검색 쿼리를 처리합니다." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2865,31 +2926,31 @@ msgstr "" "주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" "이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "주문_제품_UUID는 필수입니다." -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "주문 제품이 존재하지 않습니다." -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다." -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "주문 제품에 제품이 없습니다." -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "파비콘을 찾을 수 없습니다." -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2897,7 +2958,7 @@ msgstr "" "웹사이트의 파비콘 요청을 처리합니다.\n" "이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2906,10 +2967,14 @@ msgstr "" "요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " "리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "현재 버전의 eVibes를 반환합니다." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "대시보드에 대한 사용자 지정 변수를 반환합니다." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.mo b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo index c0ac67137ab3472d53fc49f6cb8fb0e876659e44..cfd3fbbf68c361c546947421dc902d2c8fdd980f 100644 GIT binary patch delta 14960 zcmZYF2Y6J)-pBD-AwcLggue6;Lg+1sgih!+NE4Q1NdlyhO=toOf;0i8C{-+gbOi&V zpn?S(f`AH0Qv^{F#jYso`~B?p zjhW63498x0w!JY-j*04MOkW&@zv6D(jaxbyQ-pRyI~zk6W=t0b7$oxy8BIx>u688x z7)jh8BXAsQ#1EimY7v&lm8cth4%L1yau4Ph9^^tLyD_W8#}kYhOkB6SF !}j+^ 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 Z9-KLG%-GC~(SuEww%zsz1$k!l{y$K~{89h_ diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.po b/engine/core/locale/nl_NL/LC_MESSAGES/django.po index c71d7a14..b9c230ec 100644 --- a/engine/core/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/core/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1152,7 +1152,7 @@ msgstr "Gecachte gegevens" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-gegevens van de opgevraagde URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" @@ -2811,6 +2811,67 @@ msgstr "Neem contact met ons op" msgid "About Us" msgstr "Over ons" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django website beheerder" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Inkomsten (bruto, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Inkomsten (netto, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Retourzendingen (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Verwerkte orders (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Verkoop vs Retourzendingen (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Geeft" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Nog niet genoeg gegevens voor een grafiek." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Snelle links" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Geen links beschikbaar." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Meest gewenste product" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Nog geen gegevens." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Populairste product" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3030,7 +3091,7 @@ msgstr "" "Afbeeldingsafmetingen mogen niet groter zijn dan w{max_width} x " "h{max_height} pixels" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3039,7 +3100,7 @@ msgstr "" "terug. Het zorgt ervoor dat het antwoord de juiste inhoudstype header voor " "XML bevat." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3049,16 +3110,16 @@ msgstr "" "verwerkt het verzoek, haalt het juiste sitemap detail antwoord op en stelt " "de Content-Type header in voor XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Geeft een lijst met ondersteunde talen en de bijbehorende informatie." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Retourneert de parameters van de website als een JSON-object." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3066,11 +3127,11 @@ msgstr "" "Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met" " een opgegeven sleutel en time-out." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Handelt `contact met ons` formulier inzendingen af." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3078,15 +3139,15 @@ msgstr "" "Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende" " POST-verzoeken." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Handelt globale zoekopdrachten af." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt de logica van kopen als bedrijf zonder registratie." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3094,33 +3155,33 @@ msgstr "" "Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een bestelling.\n" "Deze functie probeert het digitale activabestand te serveren dat zich in de opslagmap van het project bevindt. Als het bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid is vereist" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "bestelproduct bestaat niet" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "U kunt het digitale goed maar één keer downloaden" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "" "de bestelling moet worden betaald voordat het digitale actief kan worden " "gedownload" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Het bestelde product heeft geen product" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon niet gevonden" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3128,7 +3189,7 @@ msgstr "" "Handelt verzoeken af voor de favicon van een website.\n" "Deze functie probeert het favicon-bestand te serveren dat zich in de statische map van het project bevindt. Als het favicon-bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3139,10 +3200,14 @@ msgstr "" "Django admin-interface. Het gebruikt Django's `redirect` functie voor het " "afhandelen van de HTTP-omleiding." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Geeft als resultaat de huidige versie van eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Geeft aangepaste variabelen voor Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.mo b/engine/core/locale/no_NO/LC_MESSAGES/django.mo index 980ea23003e3ab2986a8317e56ab54e7ec8bd62a..5e6d0bed92e7c3a52f0afbb46716bad55c2953ee 100644 GIT binary patch delta 14922 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 YJSj7kWr+3WXb;#i9=H_b88qmB0LT;pCjbBd delta 13949 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 McIQWdo~N?^54K|K>i_@% diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.po b/engine/core/locale/no_NO/LC_MESSAGES/django.po index 4196d84f..e409ec07 100644 --- a/engine/core/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/core/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1133,7 +1133,7 @@ msgstr "Bufret data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-data fra den forespurte URL-en" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Bare nettadresser som begynner med http(s):// er tillatt" @@ -2773,6 +2773,67 @@ msgstr "Kontakt oss" msgid "About Us" msgstr "Om oss" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site admin" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Dashbord" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Inntekter (brutto, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Inntekter (netto, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Returnerer (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Behandlede bestillinger (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Salg vs. retur (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Retur" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Ikke nok data til å lage et diagram ennå." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Hurtigkoblinger" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Ingen lenker tilgjengelig." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Mest ønskede produkt" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Ingen data ennå." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Mest populære produkt" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2990,7 +3051,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Bildedimensjonene bør ikke overstige b{max_width} x h{max_height} piksler!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2998,7 +3059,7 @@ msgstr "" "Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den" " sørger for at svaret inneholder riktig innholdstypeoverskrift for XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3008,17 +3069,17 @@ msgstr "" "behandler forespørselen, henter det aktuelle detaljsvaret for områdekartet " "og angir overskriften Content-Type for XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over språk som støttes, med tilhørende informasjon." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer nettstedets parametere som et JSON-objekt." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3026,11 +3087,11 @@ msgstr "" "Håndterer cache-operasjoner som lesing og innstilling av cachedata med en " "spesifisert nøkkel og tidsavbrudd." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Håndterer innsendinger av `kontakt oss`-skjemaer." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3038,15 +3099,15 @@ msgstr "" "Håndterer forespørsler om behandling og validering av URL-er fra innkommende" " POST-forespørsler." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Håndterer globale søk." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken med å kjøpe som en bedrift uten registrering." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3054,31 +3115,31 @@ msgstr "" "Håndterer nedlastingen av en digital ressurs som er knyttet til en bestilling.\n" "Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrevd" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "ordreproduktet eksisterer ikke" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Du kan bare laste ned den digitale ressursen én gang" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "bestillingen må betales før nedlasting av den digitale ressursen" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon ble ikke funnet" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3086,7 +3147,7 @@ msgstr "" "Håndterer forespørsler om faviconet til et nettsted.\n" "Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3097,10 +3158,14 @@ msgstr "" "administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å " "håndtere HTTP-omdirigeringen." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Returnerer gjeldende versjon av eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Returnerer egendefinerte variabler for Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.mo b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo index d06ccd026c00a0f8f8ff34e1d0a08f0aed7a0ee7..ece54ca4fb59541a7aebfdd4f7b8094a5825e1d0 100644 GIT binary patch delta 14964 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 delta 13950 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 diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.po b/engine/core/locale/pl_PL/LC_MESSAGES/django.po index 5084d3d3..98d101ab 100644 --- a/engine/core/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/core/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1139,7 +1139,7 @@ msgstr "Dane w pamięci podręcznej" msgid "camelized JSON data from the requested URL" msgstr "Kamelizowane dane JSON z żądanego adresu URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" @@ -2784,6 +2784,67 @@ msgstr "Kontakt" msgid "About Us" msgstr "O nas" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrator strony Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Pulpit nawigacyjny" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Przychody (brutto, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Przychody (netto, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Zwroty (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Przetworzone zamówienia (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Sprzedaż a zwroty (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Zwroty" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Za mało danych na wykres." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Szybkie łącza" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Brak dostępnych linków." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Najbardziej pożądany produkt" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Brak danych." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Najpopularniejszy produkt" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3003,7 +3064,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Wymiary obrazu nie powinny przekraczać w{max_width} x h{max_height} pikseli." -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3011,7 +3072,7 @@ msgstr "" "Obsługuje żądanie indeksu mapy witryny i zwraca odpowiedź XML. Zapewnia, że " "odpowiedź zawiera odpowiedni nagłówek typu zawartości dla XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3021,16 +3082,16 @@ msgstr "" "przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i" " ustawia nagłówek Content-Type dla XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Zwraca listę obsługiwanych języków i odpowiadające im informacje." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Zwraca parametry strony internetowej jako obiekt JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3038,11 +3099,11 @@ msgstr "" "Obsługuje operacje pamięci podręcznej, takie jak odczytywanie i ustawianie " "danych pamięci podręcznej z określonym kluczem i limitem czasu." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Obsługuje zgłoszenia formularzy `kontaktuj się z nami`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3050,15 +3111,15 @@ msgstr "" "Obsługuje żądania przetwarzania i sprawdzania poprawności adresów URL z " "przychodzących żądań POST." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Obsługuje globalne zapytania wyszukiwania." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3066,31 +3127,31 @@ msgstr "" "Obsługuje pobieranie zasobu cyfrowego powiązanego z zamówieniem.\n" "Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "Order_product_uuid jest wymagany" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "zamówiony produkt nie istnieje" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Zasób cyfrowy można pobrać tylko raz" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "zamówienie musi zostać opłacone przed pobraniem zasobu cyfrowego" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Produkt zamówienia nie ma produktu" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "nie znaleziono favicon" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3098,7 +3159,7 @@ msgstr "" "Obsługuje żądania favicon strony internetowej.\n" "Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3109,10 +3170,14 @@ msgstr "" "administratora Django. Używa funkcji `redirect` Django do obsługi " "przekierowania HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Zwraca aktualną wersję aplikacji eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Zwraca zmienne niestandardowe dla Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.mo b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo index d23de866a44aecf9f0c1444dde5ff74b512867eb..3b614b5cca7067e398fa5b92564d23b1f1ed5389 100644 GIT binary patch delta 14992 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1123,7 +1123,7 @@ msgstr "Dados em cache" msgid "camelized JSON data from the requested URL" msgstr "Dados JSON camelizados da URL solicitada" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Somente URLs que começam com http(s):// são permitidos" @@ -2763,6 +2763,67 @@ msgstr "Entre em contato conosco" msgid "About Us" msgstr "Sobre nós" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrador do site Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Painel de controle" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Receita (bruta, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Receita (líquida, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Devoluções (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Pedidos processados (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Vendas versus devoluções (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Devoluções" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Ainda não há dados suficientes para o gráfico." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Links rápidos" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Não há links disponíveis." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Produto mais desejado" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Ainda não há dados." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Produto mais popular" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2979,7 +3040,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "As dimensões da imagem não devem exceder w{max_width} x h{max_height} pixels" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2988,7 +3049,7 @@ msgstr "" "Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado" " para XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2998,17 +3059,17 @@ msgstr "" "processa a solicitação, obtém a resposta detalhada apropriada do mapa do " "site e define o cabeçalho Content-Type para XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Retorna uma lista de idiomas suportados e suas informações correspondentes." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Retorna os parâmetros do site como um objeto JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3016,11 +3077,11 @@ msgstr "" "Manipula operações de cache, como ler e definir dados de cache com uma chave" " e um tempo limite especificados." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Trata os envios de formulários \"entre em contato conosco\"." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3028,15 +3089,15 @@ msgstr "" "Trata as solicitações de processamento e validação de URLs de solicitações " "POST recebidas." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Trata as consultas de pesquisa global." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Lida com a lógica de comprar como uma empresa sem registro." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3044,31 +3105,31 @@ msgstr "" "Trata do download de um ativo digital associado a um pedido.\n" "Essa função tenta servir o arquivo de ativo digital localizado no diretório de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid é obrigatório" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "o produto do pedido não existe" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Você só pode fazer o download do ativo digital uma vez" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "o pedido deve ser pago antes de fazer o download do ativo digital" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "O produto do pedido não tem um produto" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon não encontrado" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3076,7 +3137,7 @@ msgstr "" "Trata as solicitações do favicon de um site.\n" "Essa função tenta servir o arquivo favicon localizado no diretório estático do projeto. Se o arquivo favicon não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3087,10 +3148,14 @@ msgstr "" "índice da interface de administração do Django. Ela usa a função `redirect` " "do Django para lidar com o redirecionamento HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Retorna a versão atual do eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Retorna variáveis personalizadas para o Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.mo b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo index 46e65b89d7c9be5148c46ea761968bc25da0d559..b076f8992dba2499e0db7409d125b8230acdc459 100644 GIT binary patch delta 14958 zcmZA737pT>{>Sn2%UH)Uh#C9OGK_5)V;y0vW9(bDY-48346~Wvj1Ycg&sLU{B!vob zt06_CB1?_REy-GOv!y64Zq)zv{+;80-TQq!PS5i>=leb1^F7P=`$I=g6#n{LVgI>u zL8}bM@&}BmimyFrOhzGN9;&ZWV{WuGh9YwlM|+GZ(#n`(#N%2UQxvnX1U`yk_&8R= z=ddvD#B#U?Y1SOWAUuvUjPaYV$f$wAZHx)Q1gwBLxDpp&5v&$t&#QyQiJM?79cqJR ziKn(TrY0`Ndbk}c;|bi!!`(!hGOx6^?SG3cxWD;5kTIrl2Nf8Th*5Yf zz|&YA+r=6)oeqq^-gv5`F$|80=xj_s9D~2%8~6sk+Qpb)&Kus<7@9ESy77R1GB1eT*XvX0i*1(p1n139M zn!2A+4{{sTPDo#SziNFM|9snqnSqBIL4TdxqjGK#=j~B;fcol zf}N6BSX8tehs5LXXX2+*m^b2usm8?9;Kekam^d=scJM%kG1-)7W*M`K^79jonTxA^ zc9&GkGo}>ngd?+HqOl&%@RNxk^D=7je2SWiqLb{lsft?NO|TGl#ERGzHMAp8*C%2m zE=H}TJ+6Mgiw_~sW_JW0|wXhVm$ezIuIdKCP;>l8`vO_4JFwL0y z_$=1N4>1a_VpFU--A-k1)DsTI+BgGs-AmXAKe6?GbK6zaoMB816+N*s&ckZ>qVqje z181=X7G>%*QteQ?VE}4q$731XiAC`sR>T6-;=71y_a+wC{x36=?Lk2$WPzHA*a7!r z7c{f%RCL9LghNrgU=EhXXI%X&_!#kS49Av_+wD05HTPq&0%oJ$i1V;4_czay(a>+j zK+jPF~s)HlZixaT{F2`oL7d2%!(65SGbL@?K zqlRoG*1}}e3ub|rgj*-Nk!Qi?IOpq+g(}{|+_eh3DEeQ4aN>RZ!bJd@kd! z4n(;VMxYu_MvX+aE1!v)>xHNxUxymPZKxaWN8RX{i%+AM_zLR1QevK6kEVaPiunj8ihpllM>Z`XC^#DJi z9^fyhKV+fpaV=Djqft-P1GR`oqi*a&^>`kt!)s9uy@on(AFAWWoj;(?EAoV03l&lA zw87%o3rpzxKbTA>3KFmxZbVJRSJ(nCqHa)mk$r+l)DXABV%P_@28LiTCSy&Uh^k+K zYG*A*;c-+4f)=Y|%ztSzu@pq1dYprLvd6Iqu5|Hps0O#W_$^dJhp|2$$5wa;H(~Q7 z_WV<*k-LD+@irF5$fZn?_J4CS{5UZgs2*-c&GBiBzze7+D!I(QawAbUdKmRySb`eb zO{l4R8@*V7dLR6VdZ6M@2EOQ~3Qi(ULw^RDZ^)=eeV(#IJP5lHC!(Hk3u+{GU|HOQ z8qxw(2MaB?9d3jn#LZFXbwzb_2sXrJ*aY{Wru5o!#y_6S-xRdR_!ahs3$PUNax91I zu_fkXW4wyd7`D=W6?>sN(hqgr6s&^tUAzIS6TgAY@iSDrg;z2D^~i*+vc{r@Iu-Si zc*4c6qL=unE5C+KiHkpN_k9f3CLV(|a1QDXxDnOfAyj);P#r0{+O}8MPewx%hkD`o zP(wEvHFr;-7TqQnZ^t;|Bd)ycGq%1mmZrQms-0$75nG|2v=5fY1PsGG)JXZ4x{9@^ zIer}@aTn?dzQ8%iKx}S26f&6)Y|z4)q&fn8x~t*cT*MAjT&NAY=d4LjE%Ja zA0?v;H)2W5N1eDIHB@J@GTuRTF!VXQ$f_d^m?o$v9f4)ghplloK8Ww4+Wj1Z@f@oC zt5`+*zvx=KnroxB-7seYYRJ;C6;4MjzMZH=bitK}J#T*}^h1rPxP- zyCf97ly^sM(=^l+Enm<0tHF;csDWoO3GZS99Q&f3t0kx>+JZViA0zP~w!~Z585_Q2 z8_q)Ql2=h{<_4;RzoR-_YJwXs5$=zt73(Xb_AN? zBgE}+AU=y-@H)n0vrTr9PD3y8X4IlQikj;4elohjb<~^`ec65kqMga87u0Ihh`i^# z>dGs;Vt+Na!}`=uM!jNRLM_(g*a*$5w*AIfk8l`9pnnz_HN3?Ye2MDFUl@Z8HuH3t zjLmQZM&Sw692VPR%R8dtT-4NTL!EcVS$eB2k3~&c7BZrK^D>#X6r9Fr41LWu*b`e2 z&p(j3ab27?26xGXKeHj{qA7?v&nR%ARje% zzhZlgdEGWJ1vU4(u{QpM;aL6+JBMvhYbOpva6FE{$FMY>L~ZX&SQ!7rQs{Y;_PD<( zL#7BuV-t+QPB`9`Z*%Uz5|r;jHTV&h#Z#yo|A58tt}8E+Z{LVvsBIj9k=OwnVfci5>G*0xEmYcWvq)8-m;77A=Gurs1bV+HBu+A0p7uC zSZ|lTPuE?He+LROC}@G(Pz_(eIvDace-VW(P*0wN8p7!qjI&X@XBld0He(emz>;_c zb;I9KBm3YxcK>(5*2I0@Vf@wbdfaxIqJMiSRH@HnppN- z`()8rlsFNm;{?=PUqPK0w%0E17}Of^qZX%s0U52{)mR>PV{tr&dZLrq7K`k&yQC9p zan3jY>q8) zCh7*euo`}cdNT8Y?LZUMjYnWZoQFvsW8TEd#GwcH%P8Vzs1ZDN&~Cr4v6%M%B{Dkk z2I>aEAKAI7j~bCCSO`0#hByuvU|-ZookXpL?=Td9Mn>I~IAo{r5NfFZ>HH4o(4m{? z<^E>U5&LFZjopdQVmQ`4%3|Wqy)cP*bb&2DfT_e+QByPUn0-|*L#>^o7=#y4BYGL9 zVUSBn~J3@)Uo(B5rz` zKl|hDGj89Xvo6DmocA0)h;O1^Jcm$k#5<^tl{#;CK{z%gj>FbC`8?y#OU%4MK`Tu8 zhEFWMfZ8UbzqJjdqPF8qtb&Viy@!tq7AKCsVCQ%s)}?$bdLE$D7uj~ii@xWbLi`!S z*?@T3RUQ&w@n7RNIhmQ)`2#0@_alE|#pE0OwB~}_H(BV!`)=`yC7$&g7jnZbfAC7C zeD-a259J5`ZKtN_U9P3PCr02Ke{mB$^*5u#d5?QMW-oDzAdd+l_Wx4YV?H4hRLo<3 zq~h}up1|K=?l0*HY?sNUIguOA#@@IRBk((Hhrwk$CKlsSFRCX{Q?VZPaoUN6@DOU` zK1Pk~C1k4n<_4L@6oiL(0;_f)79k#rfhoWV#HpyiZvO(qhzFFj=TAUwziiYEXJTg_ zXgNNGCmsyk$fSmP0^fk=u?6Q9U_b6}3WeDd2BB`a5Y?gO7=!z<0se{FZgnep0xz1e z7)iVoyWw8+Vo+skI7Sh7L$xy*yJNnqzazQ7saC~flCeGN$u?q9+>3gmgQzL^3ajH~ z)Cd)=>MZS^V*^8iP4nLLv?UBsw2m+4W2-~U_xrz8&*W!urcZZVo}%it?9QzndnX& zkGk2A~re2i+~OVr2aB5KWq)Ux%JPz~31aVr;hL`~(xt~|xX6a8c~B(qW5 zXANo!UPnE_Y3H}7C%lB}&`($j^`2H-8ogKpwKif=*T=c~-l&d^a^|4kjQ)9K>XTWA z>fvG3B0GiE@HT2rL+jWEqEU+|&c$O<`+XAX{6(niH@ot~&axCFhp4b_2TsPnI5T@0#c3bIgh|74(o*CmD%A9e8!)X)~=y{b7cgZ(iKqj5ZHm9Im6OSYpr{ypm3@o!Xz ziqyAn)@m56{U6~9nqybu4ywSp*cqR~F8C$tGg_H1h!$Tx9D)N;+iWXp7ac%#^jlYc z8P#D=L)(E8sCH_iUkyc)(T#`WC%7JUK?eWkrn#Pk>cCT|IXr>G@eC$mtHz$d&-AsZ z-SIU>;$@7$&`A60jl~hf*{G2yh-Ck3^nowArY5RmQOL)~jEQ3ZtH-M-&kJ`>-uoF(gruYu7#H*;0^!xc;rR^{mH79$p9v(*R z?;BVb|H2L!-okbu8Doh3s5jnjY=XB?yQoe}d&2>!#W~x>yHM9%MqTHx-O3h>L^bdX z>MM5`)#ISncF0NNoA=0Q zZVqDzohMj}RG1F7 zz9Q;|Ls4sJA!<<`L4O}IC1dR(c?8E0FGCIS4b=X>gStUzNB8DJJy8VeMomz=rYq_} zhM^uH8#ST}QRl65@eb689qGva*ASkfKo?#|edU5W*>`wJR0kS5yJ2hM1k`nFPz`NE zFYZI#@H}c4-9mkos&=*?w-{7?FVrGT=2*1K84C-QsuqEm< zJqcC+BBtXp)M9Jf)z(i$-DoYU!!M(D&pQ~0SNvo`J-m^+*$d<2>^AYEw$EAAF8JQX zf1y57MY~(;qn@;j&Ry7#`ma$PZV+#$>S5HI)SpIX2$|!kuUUg09y1E3p;r58 ztdHe;+BMP+HP;hSt9-62--LQoevNv6RP1HXAAs5|^HA;Wb@8v*mHV4Uz3qO@L9NbB zs9o?c)aq`~$2O3TTE!c%Ievk9vlZ`aZ`clX{S?%qeg}tQv3|B=3C?xcoAT4xMc@DW z{p}BqOw^q0LM^htksg}X18h74<5iD6(KFCC)El*(o(k);!V`HYW|4*Io=iZj!#9EXP_FKfkkl>YIkhINANuA{m^!V-FBT& zyI>IN4LJ(68|IH-|A&%ULxJ90Z=&|+`|gAjs6P)}L9K<7BkgCn557da1gB!tQFd`{ zMGf@@49AGkb_)7nGvbw~cmE+&hkqUIw-?qMW4GUE)GA$t>S+OLfB%N+NbLmoXFAkw znT%@qC~D2zMQz8HW9`Rh6zX@u+o(6_hp0E}5%l7helpsZzhND$nP`Wq8|o|A5A_>x zJZh-7qrPfyp&AZJvhRT^IGDH{YP+pOJ>kcw@BLlWi>Y<8ebZ*5uJ_L+6HDev)X(P6 zQ77KOhFEu;ZD;^$+sr|AH;i_HPY;hCki!k{ZVUY8mfK~>WQC6y$?>}7z`V4|8zVB zHDw2|k@o-ZWb{t1Gr=yFL8wKv27BRoT#k*>ZTueU#w9as+zK^fb8tNF#%K)Bv?DkS z^%0wknv(UXkvOh;?SD^}J+U!*h@as<$5AH_dw`A+_dp%=#e|WzkWVJ1Q+|y21@hDJ zP12L(=abq{$2-gvB}J3oC0(R^32A_9Pxm)b1dow4?Ao_FsuPcNCn=sr{uVAH%_Zpv z$wV4lM$!?9ynh1!r=#MV3JKP*YO&080YT6$BAdT>zd)ulzm9qRn%g94RwS+!1K={Q$T_C zc|%vB%1-3Y=noPk=E^^oD-wRDs%5)@>CQ!jn3LFpMKypp+X_Alp zZqj`6LpU#p{8aMKlI|T}kiS82#uZFQc8lMfp@J{we;s$EYLk4Ny8v6`a?-uyYcd}Y*TL?p)BW3!>5os7TF}_s`x@*= z*&^Z^r0Jwh#5%6HMiVHTM`}-em2zIDf!Avr@|SfY#|xC{|C-gISNP&Ujx|S_|0{y0 zNW}>zxki7%$4TQT<2z$IQvYw%vCFv>YuF-l1@(rDr>wmzn@#?0l76ZUq@9c8b?{j+ z4Txvh*p7c=SDC~KUy=$D|3o@QeiSFaPjj{ znoMfPiEmK15+{;=C0|nS{}|W8ixlX1hx8Kpvo792>?L23G>L|EEFu2|cEr(`O8Ez< z??4^$6-i^M)6tjwzp*m0{vY8-1EsuMu&|#0Bo#yOdF)GigtV5V<4;_O9xfb2{zFoI z^5&bjRJ{FX8AlSbcHSDgGQQZ>#S&2>87Bfd@IOKtqaDfofZfHaOYfTUw);J+*` zTtWJclYb!9CJmyYS5e1a97|k}G?i41xEJoE?j-3);@7Yo{tKs)B1oM$XAZwVO%_3E zD(@XjsW?nf0d;ttdu(X_aNf@bcYPPmEk>Gsf2GUkb508Rp45MevBY7TfBou-cQ?s! zCyQqHbxQyA;v?O;ul@nz&xt3IhTV6rPI=J9m7L=_w*%$BkZQTI>UcoJlg51&EM2bCYVARK}y&A zzbBcIqM?OePQ zUvc>ms*7;Vy`!ef{6&3lof8;;Jm@N-C_F(*C6#g)*2X7@dvVShtmMv}LcR}4$NQu> z@_z=R|NQ4ivJX@KlPmh&oj;s5-=fU_3IAD4kV(ZZ@`c?^Q}7$&wxrLf3nl)Gd-ZXdaJ}j%}-{&rfcP?}%jKr;!J?a`# zbrNN{c$T!9d{ye&y7Q0V0a9HTr{g)!%i^5U_$l#5S63ffQMQRcf13RSs|YT+%9iei zzfq>?d5lz-GX0}sV^=rF*@bIvkb+3t3S#^nG>1DKpgR$R%Hb{72-cxH6TWAPrK+9(Mgl z6MU#KGsy%UBR*p9@H6bTAa7q56o=OX`$11Cn#|ax&dXE2{gZRZq5e|H?$G7l zGp|_YYg=zX@}%UqF*!QR&Pt7QUwBGsK6Ia)gzU7W{F~>iH>_}Ac21g` z8)fa;tBVDD<}|evLtoN$s~lfeW$Ew{VPl)qHivE4u+7=9nK_IcMox2_oX=tk>5E7?6(cz$sfco% z!=x$YkW&XFhn$KeQ6f^R|Lgs|F8{~xempME>vLV#ec#u89qxOk&R#5d_;f+<#lQkf z49ARo##F%A(#G`6Z%mVFDm7+xJ!2>`Z(%==F+0(pIJki^ei)8LFd9QK0n1`LEQo_J z5Jw=FHP2%KoPp09<2AF%=mLcr8dDNWVHvE9i?JaV!sDoRr!bk0T*6Ak5skSyreHZ7 zjyrgmS=fj;v8laY7SeY!*SXK9*O&)n^n^8=854ymn2EzM43FYeZum2{$Dzr_&}Xx= zxiOvaHr~gi6l1nx{T9X)rQJ`MM0_vRK1kh`_Q?-pDayaVQ0{LolL^L$SQtyTvQJtL zLx>}>AU4HNY=PX<^u~|5(JJgl+_#M}-HCT#3k+y$ub1A=+6ybuZV+k;W}}x;H1o(T z!2=kMy`C^;1x~?27}DODVi<-RsTl0U4U$o7VPOZR1DE4^$|rYZ9bwgUuEkWOcQ)o6 z^&6iwCX4cyx-w<>Z#U+@Et#ku#`M5(J$W)tIFez^GU8%=jMW74?Zk3)Ds;<(|qg9k?#GnVqPqZt2PR9qRu zg283ujA7JF_;|ahhNI?s5o*qkpjPpBsFAsh)$lsj!jcp0&?cekQ(fE+>6__SK_;n`Rh^AEI{6WemU{u?*frwJ$PFQ%X>gjJ92E^z|Io<22L@sXyuo$D!(9MwKsf zZa_`h9@NMkM0M~AM&KV<1B0jYcEskWDVu;bxW8FTMi>4X{qPD_#v7<7C^o~^2ci~X zWz-Gpx;P27*wRr?+5;=&VAPPmj9L?~p&s;2EQ;&VtDfy}4KAZDd;`^?d#=2|3wEvp zP(xlBHH7h~8>XUe)Y--TFoJj#>c$JO04_y6;7Zi>-+6)Y*PLvpKo>ZIT2$YnPWT0N z!X4C&AEHLUf2Oq@s(mbK&YPpAW(aBupLO-Gpr+&_R=! z7pNZpfV%MmRF8|ywjGKd6Ytv8y^16^ElP81Lf7SeW<;td8BV0ZzkrF&EXo?_4`_L$EIKR4jDbDo{!eproo2ic5`F0eg1fg0j7*b1+sp0L&{b|f02E|i3tnsihLXQLl(K}}6As@-8! zN6%vn2EA&(mPx279fRI9GB1#6hR0DiEVj_jX)tQhRK@z(0BhoCtb;2tKYoSk$SDlK zf3Q3jU1Z~E3?r_Gnt~@W5MN%z_(zjjNrBvt8tPxLA{NiKaV$mJD z;8hGq|HXFIS3_N|9qPPMsE*9V2;8uk@z>BCrJw*lz*6`KHFw3A*hN$w6(?Y8Z12jK zI9H*jZXN16J5k$t59&!zU=UuzP<)6QsX*^*wju%xQBW6aVIpeZ4#%E2AM4|F)M^h~ zYTLCzt>$M?9hi!`;XEvXZ=!Cr87p8OM&LP&MepBabYivF?Y?h-YM6=|s!Y_APeXNZ z1(w7$s0-v^FkVL8@BubNzh!neBx5n+u2>WYpsqg}StDLEmrOkh)}dDM1?M%?kln%t z=vi(TUn8tbJOov~5>xRMYQ)N}U}sw+E0 zXxn7sK%9;>@JFnGrQWnpR14L<0oKAa)S`SATi|BYh3}$vN$hI7W+tFII0e<=g&2-2 zRx|#Zvpp2Zi>UqVdCSJps3B~Nn)89E4lP5Cz)tLi`>+dETw~Y5I80MLYLS|^?FiIF zt%VM#sebBhuf4%I3N$BkF&=k0Z=haG<=?R*(!x0!RlW=x<36m8kFYjIy=xb1H&h2^ zqOQLcb>0QkR21~CwHL01D(H!7I0JRzP1qD~U;;+3vmMMp4fQ-!`2iRIiJF@D_iVfV z&PAy5{irFsiyBdHjrI2H*AMGZumW|#FHzev-v;|c4N)UA6kFqRY>wZ%xa#}1qa!hy z@(s?Lt~~YwV_H%^99!TPOwsX{yYe|$f_NqB4fz4q!q2cK{*Fhuzlqq&Cm3&HG>+M3r(`KsCq9YE z_z&vDW;u3Ijl?M8WmpYA!9=`)8nMXjcBC?}2Jtkki0`BBa~QozWbTmBT*vRQ7aoFD zi5FuN+>Ltj`=}xG?6fZ^Kh*XN!YWu3%VRng!%?UkPDYLF>sS~+M=jnHI~jjnxacnX zh6~0t;@YSupM;w0w^2`U81=;WP(xcj*M4qeP$LtEf!G(-k#VR8nU6Ye8)|KxMLkI9 zZpL372-|JvxH^Us$6--S!!pn@Q6u&?*2Uwf_eQ=v z`{c=}H8unj@Fr@?ykUFo1yfKJv#=fJVtp*|vAsbeRwN#bda{`qi#ezpU&a_L@(HhL z59eYz;uZTy#5++V*!eTN{rVsy;WZ=3sNn?E4PHUb%|_IS*A+TLpukH;Swy1Yp@`Ggc{*bF%2)^ zBkmJ@n(@z|pz0a+Bn4i48QYw*LwDl5^&)Cf{fs3s{5!jU<8TM@Fl?am3;aS7yQ5Zl z$VGd81ePa`#nrk#YU*xWV*H~hxO<70N6Dy;RoJQ#F2!XDq>?F#dY z-)h{jJ0{~aEQR}!rDaZ{M&?`8h+g)R(LOIz%wq~*3)Ebhb*oatkW{8+BgCvL4@ytv{9{&c@=n2}8C2 z^T;fs;56z1aXOQyEfub=QlvL zZ;I+z2j>9veJjGf9^cn%0R`$|E^3h-L4AyFpyt#s!d{>XY7sSXac3+|JQ&q}3hMl2 zt~}Ry9Mz%kQQPk))YOJ~E7?Wz1gc;VYMW%E-qqisdLC8TPEliLI_kzlF&w921ipdl zz+TjpUce~4=i>5J?0E^O5%9Jq6G5gQYVN1GiZvKX{Gp34qt?ows5$=+)6u`GU5pv1 zRlWfAEm(!>_-QPPKchNyAB$i>q_5m-LdmG0Dz?Phw!&m#3*zaRiU&|%w<3HnwD>}> zJGMZ*H&&o_(RNfvzjozkP#wO5>cC&9>y+YOpklQD!^r5yZSfesiaMbW9|X9cy>RY}5r`!EU$~HRS)e`ocBs)RaPXtP<*#-wD0y@hmcW zK`cgfWF0<%d$0-m*Yfy&Y;KAA!D1$M!d2J`e??7Uef|wj*K3a2&Yds?2V)$r$HjOK zHIifE*#FuNS#fqw-p6R-T-5%)j8S+Sldw#@?Lb%5n{W*3jkf_c#8*+fsC0t8VG7nE z9`E9HsPoRC&I_vJwFT|#*bBUb`pV^^dVCKxWRZ1k{3Pl|vrwyi2kNtZ3-!dmqt=Xn zJ-ddgpyF86$Er2zP5Q2@-|Qu$ZIg?7Q+)R)bM9pm%)c)^>TJ00C zK2E^|+=e~z8ft`-8rTkJp+;yUYLR=-lhO9Min`!GsE!0Sv~yVn^#)8pJ#h!rjb22p znLJecuTZP~3Tp8dX=KlA%9@8Jas3E?L zn!8_6H}Grf-dw0B3Ps&09JOoep&ld+^#J`*BRUDyZh?#6L53W>Z4RF$$s2wpz52T7GXMi)w5o% z!8lj(0&08A$5=ds@pun4gi*=%Gd&npzYs^_UaW^P&24=q>PGWW9exe9d)8xXJlmZ8 zAL8MSlwwb8)WU9)F{ssf9JLEhyZAQhBlW;pHq}09BC7l;=Pc(s>_qut)Xx>=TH2{< ziF%XvZ0WThkxwbm*Q{JCkLimeQLFtZR>%CU?HZ|xn(Isq$1GRA1ofsojCy|*YGd1{ zpmxhd)b%#H_!_n(uHa3x`*i?nXqTXN!8h0(%eA!^=#APo*;p6%qZaK$)D3I4v*!=P z4#exR2mXobSo#yz1=ybWDC$1mvhD2;9DPx9vJSP#ens`LS_d1C#x&JqJG_IsP}7cf zJIzI%{{^Z(xRX790P05XVSl`ZU9dyCZ>qg!4Vmr~n9kN7&Mi*=F1EbCGuK)2Nn1YD z`H3^MtG&Tk)FR%G`iA_An##y-b_zRU4ekG@T)_gIPJ=b5ZB@0q{c*e=79j3{D({23 z;Ar&2C8*u;2KK@)QSXPC9(LO$pmsqj>J8ZewHuzn5bkg0kkOlK4QhXGbqx-p{yuOP zwH6*>Gi=t=W7gnQoQx3}c5$sh4fRQk#L!-L3YuX8@l4dae;2C5*U+m~8PeNszmBMQ z7OJOtsQvvTsv|*t+~4U?yJaZq!XKj6%q@(@sJ`~&(*gB!!F#ATXb$Slx*H?#KwtL1 z_T`ThRK-&L>`>K5J`N@s^)p}wYN%IXPh5+-u<392eNpU2SQE9~W}=>O4>rbIs25YU zO#7zoi#k6m)9e18PJv#z`%n!pV+;lluop@}t@a71j(mz*3rA2ds`IEJzlwT46nVD2^>aiI)Ha@t8nIk287+=Gn1O$z_G`C+cC}`shB^;RVTnQZ#Zw72a?Md|XC$hA z3hIgHquwWNoy!uj$tJI{NX#8Zr?8t zHWLlxA`!&;&#qXPzMasO@^-|U^9_`J<2#F=n8`mr0;zv|@OCx42u&+j){s2!Gjoch z<0sO`%Ip5$lks;I`uL=fzleKDuaT}2|3%Vt=y;3#KGG=iQ@KGB`TOMS;s!Nv$0pQb zethuaH1CoA_wY{P0;60ZuYAL6-83V4DgO?yle9ql5pPr-`Htl0lYe})CDu_F<4IFo z-BITU)E#p9eZH3VkFR+Dn0e&Crt*1LG1&PNWjUm-T(B@s!uPQ#=||dla565%Y1HW` z?tI=ki@Iczj+(Aa-0uiqO-x2Eki%1`! zAlfu0B~Tth`q$N~@nrH>lyOHL+QpCph`*t(BKe7~E|&akm-l8<`5dVW1$QtFhmdZN zpFqQLuAw+WnZ9g~k88xwkn{tIj;Clp5C@}<3fRhKeXs4p#GPGTG0H=<{+}Y#mqI_% zP}f)-;KH|Y8TyfWxDz*%*9%5JWa!Y#r8#9D>bH~MMt%?JAW6q6(iCM}tZWu-TjGbB z|97b9uTqXbNMoq1rZUoxr1GRB%74L2BpsQw`49UMFCz6Ku1ac7S)Oa7cH{pizg7ht zLnwQRR9OM{Hw8HHNi0Xc4!A zCjCu3o%mI3K&)eqK+BVbs(J}--GhfzEX`pM;I03C_GQUe^(7jP@_I?`(LZ;^(PekVOX>bUj|wExF*QYC6elBN<@ zAQhqPMdI&BpAokv=}4!%4Eb5)@8kP8jm9MW-jexQ>gvr~U? z{Hyurulr^#>2(THU9a!?s_h@UVHo96?gIK}7#)pCZ&UUH=`~lkA9s)n(k2UUlaA8v ztWMxaB)vx}P5ou`?Z15Pg6nDQip&V|K?Fr@k?)^WmXm*)^dV^%_4PP!F#blo#+{pr zzq)*J97=kH`huixq+=u!h=O&bziCj0vODB!ySmEwj~ck6F>Q2o zr#u`#CNe?(eIT1q-k($R*xLpJOC zH(q70lKNAwW1Hpw|19OMt%4t1K9u}=*J8H)*_Gko0+JC)B5!CO-slFva z@G?PlY{*HEk0|mG4s7d@R9XQd80hS5c16bRsQrZI`)n z(UGKoC#^!#(MNKB^D2$+kt&l$Qy5QK1(J^Aqy?lt)Fo553Tu(hl62I@3#4>X4dMja zY$9LVS8MXRZ##b~D^E+5Z7fZ$mh`~J*y`6D>j<)6VnY4?kZ zAJasgbip9}(p~s-Y)864Sr+LS`AnnvO0IFW`|d<_WP zF_yB&$Gg;h;({6ETe!9X!X&R$O-Ni6J?CCeBLFxpQciXK7M(Ppg~@ zhYJ>m@u-_xnF<;RF2u diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.po b/engine/core/locale/ro_RO/LC_MESSAGES/django.po index 8c030aaa..136c055d 100644 --- a/engine/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/core/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1146,7 +1146,7 @@ msgstr "Date în cache" msgid "camelized JSON data from the requested URL" msgstr "Date JSON Camelizate de la URL-ul solicitat" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Sunt permise numai URL-urile care încep cu http(s)://" @@ -2799,6 +2799,67 @@ msgstr "Contactați-ne" msgid "About Us" msgstr "Despre noi" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administratorul site-ului Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Tablou de bord" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Venituri (brute, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Venituri (nete, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Returnări (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Comenzi procesate (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Vânzări vs retururi (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brut" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Returnări" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Nu există încă suficiente date pentru grafic." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Linkuri rapide" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Nu există legături disponibile." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Cel mai dorit produs" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Nu există încă date." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Cel mai popular produs" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3017,7 +3078,7 @@ msgstr "" "Dimensiunile imaginii nu trebuie să depășească w{max_width} x h{max_height} " "pixeli" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3025,7 +3086,7 @@ msgstr "" "Gestionează cererea pentru indexul sitemap și returnează un răspuns XML. Se " "asigură că răspunsul include antetul tip de conținut adecvat pentru XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3035,17 +3096,17 @@ msgstr "" "Această funcție procesează cererea, extrage răspunsul detaliat corespunzător" " al hărții site-ului și stabilește antetul Content-Type pentru XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnează o listă a limbilor acceptate și informațiile corespunzătoare." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnează parametrii site-ului web sub forma unui obiect JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3053,11 +3114,11 @@ msgstr "" "Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din" " cache cu o cheie și un timeout specificate." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Gestionează trimiterea formularelor `contact us`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3065,15 +3126,15 @@ msgstr "" "Gestionează cererile de procesare și validare a URL-urilor din cererile POST" " primite." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Gestionează interogările de căutare globală." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Gestionează logica cumpărării ca o afacere fără înregistrare." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3081,31 +3142,31 @@ msgstr "" "Gestionează descărcarea unui bun digital asociat cu o comandă.\n" "Această funcție încearcă să servească fișierul activului digital situat în directorul de stocare al proiectului. Dacă fișierul nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid este necesar" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "comanda produsul nu există" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Puteți descărca activul digital o singură dată" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "comanda trebuie plătită înainte de descărcarea activului digital" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Produsul de comandă nu are un produs" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3113,7 +3174,7 @@ msgstr "" "Gestionează cererile pentru favicon-ul unui site web.\n" "Această funcție încearcă să servească fișierul favicon situat în directorul static al proiectului. Dacă fișierul favicon nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3124,10 +3185,14 @@ msgstr "" " index a interfeței de administrare Django. Aceasta utilizează funcția " "`redirect` din Django pentru gestionarea redirecționării HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Returnează versiunea curentă a eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Returnează variabilele personalizate pentru tabloul de bord." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.mo b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo index 2206585ac9119d9cec5b56de326a5b889d24dd83..ec455d60093e9ad22d682abce8ecfc19a67c394f 100644 GIT binary patch delta 15150 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¥HtSp`x6@fp$_&eO5p z|1Y0tn1k{buDqJlRh$1%H^-It%>W>IQ4&(*QcyJ=WU?;`fGK) zC^OXQh$Ekg{Ac9HxiXbsCUsTD9(Mm%Blun?bF9N}NJCv5h9BB0^C9`XE`Jsmx_o6U z$W40UI#)J>wj*AdTquG#oRo$9 zYRVpybcB%>Q~t;wC9bQ{Bz1-TcG0nM-jUHGWYn-&Z`kOt$l+lFhDWF@&KnUG9Y1)8Z8#`8#v48)EGEu> zO5(gWD?GWvBVuE@ZgkARh?rP!*=kh=mP;($ZlWi1r})V5Vcxd7X5#Ah3rc1)og?Dn zW1?K6gd(vMiiF3<#zl|tjt+~7)E#5Jxs2u2ed6*e+kS=#T`9#VzF1ILU^2*;6JbCh(sGp@zb@hP2OZli^Y`Fb%Dj{r_WZ-#Q+-OA8pOFNQ@HYx4Lap7xxTw?=vL)uxHYX}#_`fsP5z;BG)j2yX0DYJ>Uhqsd{)JiyV`tKfI;iVCzy-LG&|}) zmvO1kj_ZGS4)dTZ*-s?@?``V~Diz5G{a9~e}=dU&Y1K$|pF#rGn delta 13964 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1145,7 +1145,7 @@ msgstr "Кэшированные данные" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-данные из запрашиваемого URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" @@ -2787,6 +2787,67 @@ msgstr "Свяжитесь с нами" msgid "About Us" msgstr "О нас" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Администратор сайта Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Приборная панель" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Выручка (брутто, 30д)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Выручка (нетто, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Возвращение (30 дней)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Обработанные заказы (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Продажи против возвратов (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Брутто" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Возвращает" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Пока недостаточно данных для построения графика." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Быстрые ссылки" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Ссылки недоступны." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Самый желанный продукт" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Данных пока нет." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Самый популярный продукт" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3006,7 +3067,7 @@ msgstr "" "Размеры изображения не должны превышать w{max_width} x h{max_height} " "пикселей" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3015,7 +3076,7 @@ msgstr "" "Он обеспечивает включение в ответ заголовка типа содержимого, " "соответствующего типу XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3025,17 +3086,17 @@ msgstr "" "обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и" " устанавливает заголовок Content-Type для XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Возвращает список поддерживаемых языков и соответствующую информацию о них." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Возвращает параметры сайта в виде объекта JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3043,26 +3104,26 @@ msgstr "" "Выполняет операции с кэшем, такие как чтение и установка данных кэша с " "заданным ключом и таймаутом." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Обрабатывает отправленные формы `contact us`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" "Обрабатывает запросы на обработку и проверку URL из входящих POST-запросов." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Обрабатывает глобальные поисковые запросы." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Работает с логикой покупки как бизнеса без регистрации." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3070,31 +3131,31 @@ msgstr "" "Обрабатывает загрузку цифрового актива, связанного с заказом.\n" "Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "требуется order_product_uuid" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "заказанный товар не существует" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Вы можете загрузить цифровой актив только один раз" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "заказ должен быть оплачен до загрузки цифрового актива" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "У заказанного продукта нет продукта" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon не найден" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3102,7 +3163,7 @@ msgstr "" "Обрабатывает запросы на фавикон веб-сайта.\n" "Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3113,10 +3174,14 @@ msgstr "" "администратора Django. Для обработки HTTP-перенаправления используется " "функция Django `redirect`." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Возвращает текущую версию eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Возвращает пользовательские переменные для Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.mo b/engine/core/locale/sv_SE/LC_MESSAGES/django.mo index 47c9baf37aaf27b5762fa02e5cef852c7f00f884..e7f72087d94e6e9f7a2c61d89a2a442d1f434851 100644 GIT binary patch delta 14947 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 JLp-bd{~sMP4Nw38 delta 13944 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 Cj^Kp= diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.po b/engine/core/locale/sv_SE/LC_MESSAGES/django.po index 5aa8ef10..fcc6f0d4 100644 --- a/engine/core/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/core/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1118,7 +1118,7 @@ msgstr "Cachad data" msgid "camelized JSON data from the requested URL" msgstr "Cameliserad JSON-data från den begärda URL:en" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Endast webbadresser som börjar med http(s):// är tillåtna" @@ -2752,6 +2752,67 @@ msgstr "Kontakta oss" msgid "About Us" msgstr "Om oss" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django webbplatsadministratör" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Instrumentpanel" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Intäkter (brutto, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Intäkter (netto, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Avkastning (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Bearbetade order (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Försäljning vs returer (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Avkastning" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Inte tillräckligt med data för diagram ännu." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Snabblänkar" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Inga länkar tillgängliga." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Mest önskade produkt" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Inga uppgifter ännu." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Mest populära produkt" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2968,7 +3029,7 @@ msgstr "Parametern NOMINATIM_URL måste konfigureras!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Bildmåtten får inte överstiga w{max_width} x h{max_height} pixlar!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2976,7 +3037,7 @@ msgstr "" "Hanterar begäran om index för webbplatskartan och returnerar ett XML-svar. " "Den ser till att svaret innehåller rätt innehållstypshuvud för XML." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2986,16 +3047,16 @@ msgstr "" "bearbetar begäran, hämtar det lämpliga detaljerade svaret för " "webbplatskartan och ställer in Content-Type-huvudet för XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Returnerar en lista över språk som stöds och motsvarande information." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerar webbplatsens parametrar som ett JSON-objekt." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3003,11 +3064,11 @@ msgstr "" "Hanterar cacheoperationer som att läsa och ställa in cachedata med en " "angiven nyckel och timeout." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Hanterar formulärinlämningar för `kontakta oss`." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3015,15 +3076,15 @@ msgstr "" "Hanterar förfrågningar om bearbetning och validering av URL:er från " "inkommande POST-förfrågningar." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Hanterar globala sökfrågor." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Hanterar logiken i att köpa som ett företag utan registrering." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3031,31 +3092,31 @@ msgstr "" "Hanterar nedladdning av en digital tillgång som är kopplad till en order.\n" "Denna funktion försöker servera den digitala tillgångsfilen som finns i lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel som indikerar att resursen inte är tillgänglig." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid är obligatoriskt" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "Beställ produkten finns inte" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Du kan bara ladda ner den digitala tillgången en gång" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "beställningen måste betalas innan den digitala tillgången laddas ner" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Beställningens produkt har ingen produkt" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon hittades inte" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3063,7 +3124,7 @@ msgstr "" "Hanterar förfrågningar om favicon på en webbplats.\n" "Denna funktion försöker servera favicon-filen som finns i den statiska katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel som anger att resursen inte är tillgänglig." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3074,10 +3135,14 @@ msgstr "" "admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera " "HTTP-omdirigeringen." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Returnerar aktuell version av eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Returnerar anpassade variabler för Dashboard." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.mo b/engine/core/locale/th_TH/LC_MESSAGES/django.mo index ebf8345c7051b8f58581277c058d120ddeca0813..a5be9481c51b00b72bbe28a19188f5077c0a9dd8 100644 GIT binary patch delta 15238 zcmZ|W2YeMpzsB*|LkXd`&`ano^d=y^OYgmeByJD~dQQU)}cpdX$%{sn1zxLb44q?&*Egm$_Qv0FH}1yG4U9>{aa|i4LlvfPBW}=7W+NGONsY$#PU>I| z;MHs&2H+|`)Q7}bp);rLVC8BXHVy%C(=!aD=FW8yM{Z390WV$4v=BcqJjPx;MZ#!Sb!7`saHjxZ)2 z^%Oxy!BoUzIMGk0IGK&8$@2wjC;~>>Ws?UryUSuStc%&OA*yS;qs|Y*GB_7CmkxRR zk9zS*@Yc_!GQY=OGNj#vmMqRv}~A$ZpA_nT+ljsg>nsm_jOm*W1XaOzSQ!Ht zI`vdd)M{vp>e_*r0rz469>;8W4mJ7ipz3{$fm;6=Cb2vy$cao)GYo6vQEY%_vK@+s zScWMf5GjV;hf{eO;8@eq=wfHz@ z#BWh|_|V&*VyZ0<@+^uPvZ|<_tA}b}4-Cd(SP~au1w4!zvR}}z9R;V^3%5XZSr06T z5vT{uEN}mO)MQ+Zy5KG^K7^W#=TLY073%z3s4h=2-Oh>3s2k0VTINNj)BkEfdGCPk zsEQ*{Ju%cPpM)Cg*{CjGjq1W3s0$uNUFf_QU&mnLd#LA1>KS&DXF=Uy4pjZYGw6Sf zNjVBsK_k?K+F^3+k2+xp>cS&XJuuC48S41WSOgEFhU_+K2!HkVrT>8??s(>90TwwhF}tEQl^__FIWu~x5l?{JnB<#FX{$LKs9(3s-o?v<32_;{F3Jb)Nv_e?Oe!)s;3$T zVslKb&;O2O>QNAi6>tM;D6U{-yo0(xt~vG&%AmTqCZ@ucs5#IH(_jP^z+tHUi&6Eg z!t!_t)qv!4)iB0CJ()Tblt;BV8g*w=FeNVW;`dM$?(pJ$sESTu3A}_=@dd_XrFr)F zYp9;Pjg{~jrob}u86vI!N@RFBF+)%-+=3e8>sTCbqwXl}0{h4 zLzjrbcn`@YEjE~Z5Ox4M#N#LJKT!ui9MJJ523pB z9IAoI7TE@eU`FCfsN))<8rlg<;Q}m+hfqU$e-ZuPl+520)WW8V?FDCHI^so`8P{MH zOu*9k6IR3=OYEm&b5uiGqs|+HxpAf!ug84EyRi~pK-HUKDg9rJOpc}2I;gJhkNS{^ z_2SJKO#Hc5ejm#b2QIVgzB(2n?v43z8tMtS0af2gRDJhQ4GD;|^%eD#QP(s^J#b=B zT{jvvcCn~Q7w^S8u`%&!uRPOoyFVAEr@RoVo(h-^tD^3-C1$};%z-0NJ>{S8?O25x z<6T$=_oMFM2ke4@E9?-2p=SF^)N!Ao=FU@81D>HSm};e6O}SAQDusEl8U|xW4AJ@@ zMMfuXz_gfvI`Al}tG>fr_yX0y?C;r0mJg}GlttZXcg%n>_!dsZtoRYC-iw$9Z=mY` z33F@x2duKQxe#jEb@2>Eb=d%{iW5+iZ!c;R-S*0Jyl>wVTBCYwDYn5x)CE(owhhUK z>ZwwwAuW%3i80m5=tA{SUDXlQBjH|o4C)SMqL$YZZ+|@M0(-puN4@>$P#3s?Iq|Mn z?)=L>FEXR%TuJn+;*MleV;BZuB&y8{k81iWTDRBpr{z#9L64@^jQs-}IBw1sCb5yACy3FJTCp&9?s1Sd6d>7DxYNGOBp1SMW8eA+NAHmfXVK zVFXsd^;jM+qsB1RR$E>d6%R)Z%?{LY-+HFsX3OiKhAax{QNP(prUnJqu_9*QZYykt zm5C>!?r0CH!aLX)v+c0oc6*}YHK>OEh;^{&PHR6@`DSd0KVW?f`9SX-jQ>zFbtyyic&@12Jxd&5Ieh5|J3Cx7oP#1oHsqm#&o-)Bc5p$rHad9kzwXrlt zqW^O;tH?~netYcXxQ`l=EPL&wYK3)($DmF;h#~kR7R8`_b~3$Y44B8Ly!l@(^_+frq?TH`LtffVz<-ellvnO4J;PM>S+S>JE=%5MD$bcNg>F6D)w4 zKC*XK5d(7PYLvo{X2;6V(;^Qb$ziZw9h$99#} zLru^4@wen;IQ^P81qRN=>{9nLX+1HejH z1t*~{upjf{E!3TvPizCqqAuJWOW_O*cZ~TEYY}Jvj5|)oha74sdY!aAJPqB?|M$sM zW5)s11)rkEu;eLQaZPMb+|TnP{DU~tXf(3vvw{NLk(?x z{M$!^v5udD?qBephwo!N7QevvK|GJinI$0?nbE}MFWUzGjhBe4T;ZEA241yp#zDl5 zzwzFruq*LVe1*BM+0~TmI=w@WbVC0=GO2I!$;AQ3Zt>k6yWKX%M+?i{;oA*&Qt<~K z7Q`>^@~mM0pr2TBl&89HC+G49w&I;wkNx*ibEnKhYj?~~9E%#Nt*F)W)kD^Q2$?$+ z@KiLJ9{((*aL7k$BEiW4@%J+vxXvl>7g(uEyTPhfzJ2?}Z(z@tBtQB9_D( zSPlbU^1*}EaU5=aN&na5PKwe$s$jt1w2=5D<|ck@9Jf53zGQ|HrO!-IbmiY$2=jfN2_9~uySd~6rBt{D7q~c9diKVj_0I{G%QB_rWnZn)o92#&^b8 zx1r8YJJxYuFm`$Vj+$g|k8{jSOhi_wsWaXlmy>@yXvpgo2mghA{f=3QDJMCGXOvls>XCty?fG*(_h1#uzeT^6MV2XyC9}Q( zt|Hzu)pl*0X^y*|2VxG&cX;s$R6_!%+gV>9waj{bUVU z9KXA45-3oYe}Qjfm6?wFQ)~=2B>n_@VX9en`Sr(6#3!*O=AUinOe78_o`{+8KC0(l zp&D2;)^VR7ZBW-48cUbyz#ZO>qu7M_rWY5VWAD5%rlY(!*2YMjgga5^mz`^mtA|C2 zyLs^xR1d$08j7=C`6E=11o-FKOo(S2)SZn)&HnSK<#HW0=J!!|WSJP^$4D3^_ySGsKW5Yb`EUC#l)HT3|)xvsL5A_e{a#9 zwnE)WB&q?+Pz_H+b?I$X!&5D@`>UYFx-+VtrKpDN#9~_ipOeuYK0)0j=r{;J~$53tg_`Zu`Tg>oR7bw#&Y`mcDe3D&4FjA8_TfTHoOsPZbf+UVbt%> z=36qllkk5zhR3^kg=#?PT3hi1)NwmeEw8f9F`r=_%)s#});s1?;-C%oM!v!R#1F6@ zc8IqhPRnr}anX&o{PafFzs4@@COd{zu|9Dhtce>@Exv<4;MX_k}8#S31 zVk^43f2Y;%$!TP&QrYr^bP=vz2jii9W_Jk?}@sB1)h6Q4fqE2$WC{`HY@~H-V#+lLQLCc)b=$x`s4iZGP4Jj!>Tm6s zwnLTg_I&PH|2xNwrF<@`VF5QB_qU)vsO9S)Lq^Z!A~zlLKAysluy2z6@G11Yt@teJ zc@T8V&VebYA=`m^@LWd?P5aw+xm`eg&NsSa<9)c0ION|pK8$y{K3^{Fj@)-`4{S$O zROv_i99qC`N{e@P9v^=-x~tds+jb^G1sy2L&prmLXYh8VJTiBPW>}q ze6;?*BXf{~O~2S@exJvVIZB-Mi5-fsQSsuZj@gOrf3?RY`^_Al=8u#7~~1*8iQqY{BIh?B#!_Ub5Wq^eY=*{@XFXa@-Z; zGtcp?<1;_vNuSRx-^G8Q@rXD+xz9a+NeZ8Pfu$*Z?l+y80Y3MI_;fH_+$)bTSUL8j@1`+*h+yX?*S@wk2x$^h8ajrKsn^FE|fh;uV~e*5`gK zho!UU4MEM738>|`4YiyfrStjSS)D(4M6#x$Hw=a`H> z(+p!X`P}7sIkV6GCNwmQZD7W%J~M;E24OTl!O0jAWN+kdkl*J{o_yJS?x)jw)C)rO z>^}F|eH?oeXU$<-J_5B060s*1$?0=v^)wto9F)uF{@c$SJV5*%swd-e+a5WB1&B{$ z8@%r))0<4qJU;gcwHo!nc#8V)NXeIdwY&prs7~Q0m?@vn{S5fZGgE$_xj=bKoQe5^ zeeUwxgnfy#7qHivh-%PH)OGv;1%2*+W|s>!wjZF@?GLCEI~KBCe;7{?SK;Rio%j;< zK+0Ie#+6ZXq6zAez8>|g{{%I+en;I z;d9@DXP`dy%9gZ~axkh3KScdJm%NnS-vu@1%P0G>p^-BB99xPJE$L|WP zziVWcQ82x%?YcbWeCBK74LAkImZxGG_7XP}SFh+Znoi0<8b*Z+NZQI^XVPvP8XlsC=a^w-8a@h43ersSbgH|tqP6n;<~PEj z?0k>(E`_~GT3W13_t%UL_{9__y=O%&dpKe3GDs`JP);LW$D}X1_j>MoMSVPiV*v6^JfleGzF75$ve-T z>E$TX7DgJxjsafm!*-OF#bu-z^7^EkNxl=uB_}_Y{0h?RjTb2M3&FQu!2}$r@#jUw zw0q+~?GGRwAyudRp$gcRkk3up^~SM{DgThvpQLyCi|iZc?blK}N7_it%69*Q)Q^aH zQvYYmsPWgvW7_>sV_A~!nzp5UDe)?+f}=BA1?!;SO-mR5CUlQ|$$NeFb2dSA#YDnUhz>Fr<`?Nf zRLGW{ltTA^l^vb%eQZVQMp{ME_7~1ZhZEbA|CGcBq2Vq4KN~N|?&im1q+W0A3nYJy zl$RrVah|p##Jq!=z9fHF3LcP3lKPU`lC({7|1!C7G3j>>en2WjYEMO*QQKkcL(HeP z8B5Ab+#L6^?<(mL@pjCN|HiST;-q>UGmY<`?#o7ccD~-`v*Q#&5NhKE#@!BC%%7fb zvfewt0mt$#>;6OIoBNed;Fx~cjQw9=9pW4sf4!|V^)51m{Ohg48;#;!#Ke$ZyxxgE z;)^(v)a8w1bx2k(&gnUjV{23XlvL0w%ZDd5W}i_Q$pL4u4r+U8asTUfWrtH9#IX%Y z6^LKp>+L%EG^7#~^i;XGZ;$6h&OJ?Wf_Fk%;)z~f^UutpAe~oG**i($HuAGbXT7pG z%1V(k5}zW?<~(g{+`oLHVJ6BOd*!?!{g3T$_USc#45>SbH)+57J-r7(G14ZIws1}? zz`^@S9ZBmcyG8n5JK5T>KNaPZNIOWaC~H9all(OtL2Bt;`~vw^q=oETL|G{kFVXJ* zUqIJ4b=aAjw3GCD`5#J5#LGOtt)lzBj-QMpSc8)?AT8}g?G_@m_%HIbb)=@iC>YgP5vFy3{nT;Sjyif zukAjmjGN=R@6}U}xH|bn{DI@fd&ho^nRNdjdnYvYob4UZ1GiB&%Bx7b!zmk%-;v_T z^CijD@Qy!?pOK1s@nF2caZwzT9={;o;O#4cRVj<-_a}3dU@5^}Zzr$q?)E!>H9X@; zMJcOK;=6;pP4jHPIlqvSlWKWo_6YkoHRW|FA3z#UQ99yIq#fihVM?w4#iXsIAPR#? zueTeFfP6MD|2fY0@@0`P((XUkuJ+2NbL@~eF5KIz&)e;CQ;(s$Z&KEO2U)YG4;ZZ|^M}|fZ&=q5X zb%h46?|Jcpm>TWdMvRPz91#&*yr1qeBv==qCa*9uVz^h-u3@X-77^S{Ol0WLnEp}2 zO}l0tOuJCkIx;5se_T7^X3V_~*$+%kN?ekZ7@L&1GAVIKQsVlg19K@!IC0vSEbi7e zr$F41I466m;0A85o48^3oxE{F3;6;Q9-e&?n1-|0yXS2+iwm5|oACVdtpag{&p5f_ z(iL~Il%JNAxG5>|!=%KuNr@|x689t}u5u>A-BaF@y(_664MPIwIa} z!%SV8+dMEeDRG<5Q6`p*S$ynD)|{_vJuoRLakX197v!APag)zG*%u#u5EvKR*-00a zq`q6_-q;%Vf?Re_LXBsAlf@-3=gSw@dax6?_}#0ya_P8uw{4p=H-gtyRM)(27UQ8Fq2pGVxB-q+YVR87NcXr#ZJmN~H%>cg;##(Ka%K2OO>y0OIDcnc z>h{bgw`K1!G>gyN$mL90{PVG#|KC8zHR|cS>vuE zP)d|e0eye}IfL&rpXcoN)XbbYb?07uc0UR_`FoK2Yr2H94adlUF98|$Su+e1;z%53jBCab z(FGEhHYN?G#SEAOXJKhfj3-d_&R``Pauvf!hnD5$SOwq5PPmna8G~g=m#bi}*B5EK zndH0Q(>3M=5j|nSipJ!@D%b`;$82~EhjPO|ur_wAWDIRK+bSDV5AWl1jH+VHHyByf znB>&EgHfcPRJinaFJX0kdPXkBnJ>gE28? zs%=aP%!cZz{8*10R6@;#>2(+moR43UKd3JA2y?}7EruedzA=|5|N0YS`jS7s0YirW zG-UigB$B7GF^#cj6P}C{jy5%B9_bVpjm4sDe3Sw#yr7lZH*~Re(82d zx+6X&J-59vO-WDs%$R7dcdG*rNV-TT+rWdJjp;#tkFNB8JO$UgGhuLEPh;pclfAc{ zRGm;`Jp(mnM^Ur*GOA~;VP3qAg)mJY+qF@s@@js%7Sc9T4>ftWqK5pr+t;3uvY#EJ zbeN2SEciVY!!ZFZz1N=!O8$d^#zbJ&L3Xm%z@ntPVG&%48j_z;tKt&o#K2&CULGt! zx*n?B9qJdX!m?!ii0@;vA>0IW`&LEWxD9&C2;U>UA2mtOp?dBW z=1@n>ihYsE?wXlI8j-OGnLp+kMq#yK1RRapK#pL3yo~8Fh@ne`Sy1Kqk+z$Pm>YMZ zR?Rg`iMKEVK1J0}He5qWA}bLsyTa(T9M$4z)P~d=^@Kf9Mf5s$u9dqDa)Dxr_Y0J~0CSeZL4NLgxDAZ(& zK|N_>%z>Ywx_km^PRv0)=n_nhU!tp)ZS^Z$LtXeTszFcv{DhF&N)dNAJ zt?#4i7eI}9Wz^7gKn>vlzkC{MNLHd6z8!VnW25PRwdA^A;SpvgooI|TJF2`4>cnVN zgPLOjY=@eZ(@{6v?WfP6c2+aieh8I8JwR{N1B~>YIpWZ8oVEa@Dyqe{DPWPcQFi~VGw4TV6PL3MM*bAHDEl_FxSi=Qi+VMs1`p* zJz3(3c2)ZS!fFIy()Dsq(W_zME>OxVdp@~5?a2zJVO{k&Sj;ePA)zDusKc@e} zep*JMhO|4n(L_cOsfZ^~H%u|zj%h~Jq{)SmSPBbbH!O||F#-OBYRDN(iEl9klh3f} zaLh)!Bx(pg!E`ub2K^sSWFZ;y0IIA1#H^TVrcD>XP||f!`Q5PyPQl!`2Xo@@m>q*= z*;$_#b-h}s^SYuMG6_R*-7NZFU2}|#g!lr};v3Z1rJ8LgQ3NVo3~OL*KYzCGV${&B zL0xAXYB}#hJ?SY-k2f(GU!i&`ojb=CgkoYcN?;)@hg!FtunA7VNW6`j?b%{&y_%@m z+#l6|p{N^9#?-h3b)$`#1$Sd8Ucv(Cz9ym*^Uk&Fz7(orHB?u%K|T3!R09`a8eERL zKpbYoYp5H(z|xpxo?Q)k=puHOxrBd(c5q$C+@P_y`o?@d&f{e`8_nQtdw z87x7%11f(ZR>L!>9?QIdm4W3^H=K&^;e1q2ZA9%0TQP~&{~jW`(Lq#KT|)K99Y6mC z>IsrBv`-$4Dvv8FA+(Gw=n}gMqM~) zk?q>|Fqm|H)a0y&s^1W`T-%_|>x^pH2*3Ob)GAqkp?Dm%O#ea+QO3pezb;sph?Y$o zY={nPsi-IU@85t zG22Ck{1vsHonQDfc?)u4H(9@vJ>a6f*GS(n?n&=aFoj+&%qh3$cYsJT!F zHPoN3aP19xlA$q~ghesl_bzH<3R!7;q^fT>RQ^0Hi~BJG-(X?Pv&v4^hNuRNMqU3K z)OlA>Ly^c`Z7*C1mC*!MaU|-(8?XZ2#bOw~#x}4is;eiX@_+EtFHu8Nbgiw|+II#j z{{U*po}hZv&G)7K^lOF1$yk88;E$+f8CYkZs5Gi)I${l+kCpL;pU(A_ZD<#)ME*M8 zdwza_^~O{uzY|u)O;|;_^*(tEHHzD2dP;s(3N_r~0$V=*P}#vFJI zwK3ht=J+qB!sZ+8^6rd@NV}->#$ZmZ|CvM*lM#=FaSzfmbKlP|y2+N8#$@D2q4tXp zQLCXProkQ;qYOGhFp5O@TiJzjnHe|c~xXq91nIf1DTcR4$6ZIfdQ0Hw%&8>^52MOLm z|EmGncGxkFz+lovFgZqJ25f+;*BP^6KMcd!s3(iZBzPN#;sexJcin00EyQZ1_n_uT zf?alUrf`X9_J&}3tcdEO`lu&rj^%J7YLy&BP0pZi?NHT1^~?ZNkFCHGcmlO=1a{je zuY{Uo9k3YQLk*dmZI8WR6;#0(tcBY#5)fVve8%o<4`xghWRnsKDKFx zbFm`n1^a1i0zTwWL-E@I+rvRWcthlxFd}6rsDQd*f7BRmKwWr0euDRWD;?w|gY<0F zP)#{x8@3uX6bEn?4S0%Sq$eD)bKxueH(<;moJjtm1L;GgCfo_Q%SeR#aR5T^%Qm{-SZqjHsKZg2TPx~tESWiCLB-R2e)DPWtJ-Czh32K z1qWPXcwAak`#MX47T5cY*CNuHZ?b7nVf<}lrjeifj-7;C@7fC=LvIfJVdqFK-+`E& z^VVPl9zv~>N2sB4?%5wG3t^gs3>muHRN(<9lCkz7n++{J{M63!g)gnU@Du7?!W3Be zmHnxuJXWEB+fhCE`fqMby2)$X<)hx%9$bPgDL;n=xPHmEc8J>=$2A3b;=aZ)xoN=i zfMXVtKAhMwj~I&fNgb1mbfeUciRZ*2X&sXsOJs0N1Xc=mObP51;+UP(Uy{u+k4ZPp z<(P?FuXbL?Waaz|{2I9$pBHk>4)PZjb<7kR)F{$*%q0qLMmpv=?knS%rd(i3dB;>u z%sXI|V}2uD-~-2G;s$B>wekq&t?QUsTrTz*?misw)juA#d6A+E!>=x~L#tsQTft^3sRX8$?NN%;c| z!}P4Z^E9j^7NnsmKX=S%^2>E|%;&fddtturj=6~LA|fk@^zXq57}C=*pJ6mM!A;l* zll5}U0Bnn`@fY9nz3usnusZpb`&h@}VA3aW97glQ?*;rBRc~ECPuDyoq8mr{x3)uV zxic^quElUXfo1TSUtV~C*0_S7wK*t=$VuNgtyhfd$b+ENMMw0G|MYR4` z5}^~!S=6$t&X4`Ucmu28Yd>9am`yiAHDo@9;2F$^4^bBmac#OjDm@hSAX~6FUi9-* z4(ELCZ>kYdm$%09cnIrY!V$KsKE_t0=b@I-E7XuQ9%<`sLd}_fu?wai<#;>j5Y&@T zLp3lSv*8WYeVoybakbS}B%*>CtcgAR^bS-{T)>q02&3>{9F9@^WUlk~q3WH+Jou-d zPCr&%%<4f+&K9V8E~-c7j%EETvfIzNfqJqe3LiT-$(Z*yZtz#T+6jC)h4p>H8z9;@_w-%sbJRw?fU{iKq+z zgu2jU)SSpU$=U*yAM1MsfU3qC{5fpSwEGZUBN7Z^F!cG)4+lU_qT z$-k%ugio^#i$?WiA5_EVp~?@T#`-R*>+^hJ8xn=Oj@yigo^TZE33mDgPjLY0EYoep z*{BBWMm@=8oQE&57S5PqZ}=+?ByDEe***x>kPWDMKcP0dEVH~Ja!no^F=cQf1s|bq za30s<6C8{SXWRVXId+RJfm6vJhwAE#v37aZK+S=Ps0Uk$YWR87+&(^0#QN(> zL{IVz+d3>4{^dyxcs$=;IMo8XgGHfQeh3fX&zPF}a~3-0d(x{H*-6)Fv12-t9*WvO zZs8P+SmK!F7>~+tx|E^g{$`OPco?hV6Rd!xmf05f#apCL;3nL%+%apg{R-Qllq+pl zXTq-J*TU?$1GPLaqI&30R1are<>;SY&02Id3Bp&~uBwZwI2QRXV&btie!j*r?x>Nd51-SRgdVH#m0jM|*R%e$W7S`8XXjol zM*4!EPX4u>y}3{qXyd1kq2@%;2HSwqsL7gPqjf6wC7ooG-4TbP(tqGVZ2gU0ZQ+|) z|GMzh&5rpLU*c$N9%oOyjw-LS#dg_t)Qw7Qb<9_|3AI5r-)2`&7i>*>HEOvfiMQ7c zMeQ@AQFAL~yIroOTq2sS%~7BCy-+)u@--BDeIKIMci0Z=2dMJSs0J*=KDZt=nZtHE zrY>E*3-#p5zqLI!0`)*|QFFuXu-oxon+IVTGS;CsjNeg{GHj1sw;!Qq^;~R#&R$#I z2-T30SPtXxBYc4R5G%jW-e?l4d@-u0FCqJZYbx%yPc#wL@{OnlM1N-|(OA@uwiET5 zeFs%u^?N&(!!e9>jRV%tQIl^HuEM>jEw}v-j`xy!7By*$ALN}->;C|eqGWVFWS7?> zR9DwIY@e(*YG_uXdgL2a*Io9@AE4@o98f{RhhZJ+NQ)Q*?txE-<@sO35n_4W8sW;<%*sQ;tm{af$PsG-R66R+pk1XVxn&$he^s;A;n z4{{XsA@=|mW5ZLd|7Ap;ow8eO>}kjBCY}9^T@_bQ4Sa&SK*6*21*N|40@N3e-~Duz zbGCev?-?9KdDio`VRJE~u7_H_$u78dPu_OHF^kA(a?vs0;tSM=&z4K}f-Qcr`@w3| z97uoJ4p~Lie$WLqG&fPpt<4oX>CU6lHGZ{|ZZ|4j=c;3F;{lh5X5;#6wg)O)w-@>W z^&U|9hP}aARJzV@Hhsgl+3$A4I)mO2+_bAA?JdXrLj4Qa6Sv&9`$L{Pj`wAD0UjaW z?RJ;1PDD!oVfXwexR3Ozdv+*3`_ra#{pFYqJvgziiNwyF*$ucAjmL{jfEj_$Q4ca8b-=iziEJdIu`7`#;JqLmL+#xS(+0eK zU=^z6iPHtVkLze`NqQS<@@7aM@MiUDj3J%ny@1()-B3N5H-qhwdKgB!DXQL(3<1}> z!AUZ-Llw>#@HULms0PHMT7C;_Vv|e(^BpcnZ9MIRt;_Kz(pPaDZps|+_WaWC2fPhu zEw&~F~YX! zYdlMZlKBE=Bqq<#g=yGSR6~yOd(9B+Q!rp&;Umc8R>LDGoh`&2n4F4S;kzbeafuC2Jczpt&W8QIxzk3ze{n^@0kYAu>RfYJkxQC!+ z$<}Vz{JhsHl4cq4{RHi1L%Bf|@#n-#;5t?Cj}2JzT>?L*d@bRB4|gyZ=;~+I#yW(G z1ebh1%nY9!-fq^4^w%om?7GCK5Px@kNLoh;WE9O{zl`@0?^w@YUaGufzs38@>w;@0 z6XkutTNcXIveUr_l!+rW;DSkUAby3(3AZSBa1h4gaLRPBv3bWZ-!YU`BIsbAdWXIP zrY0{TLEk@2Cn5{{N?Wj(AJ?8e+n(e7ZO8@q@G|8HWr+7dwheFNQH4!}oaD77uNOfd z*E-m{y#HEKFQYnYT1;*7o4A~yqdf^Nvp&Q>_49&#^{JPT!0u|w5{i+ZiJ%X>cgG;& z*WV?uIQ3Yu-p@9?9C^Qj_Vdg2i|aT)?#`re2;pNg_^9^&`K1GKUJFbgD)#g%ilgKu z{+~4O8m2#?grD~*_1h8u40W)1djBDd;!OyAUYYuSnck=~Y5spoq$Qbr=y_i-NP5Q) zT=+h*d6~paFC#5F+rc2-sU1X`chZB=uVCQ zN-DNiF2^%McM9_=kHFiL2_Zz0&x??`O3=}UI{#uT(lZFnNVD^r%H;9I>A$1*|HN1O zxgE$GPspJ(_csYS@e_QX%m+BYKPfkc`EfoLyr0%6HqD7|#qE@RhbsyB{CbJ-FV(?l z>aoq6*Q7^~)<<);j8d)4aT*S|{MNy2;N-%|ySk(AXToFd+s{P(Ze|@{j&o;CqIvW0p3l$qbz?{kT;4j$1gj8 zTM3D%(---U;{A8y7wswD4-jjK^ImGMd3lU~z`x*^RMw#>(V2L9Os))$s??c}dNtcg zh^M?Hd7t4!(#!pGtKkDbo(ek>rcs`V(2#JPpra5Wnlj#h|Nj`^H$*vW2(PKYi?R20 ziMJ~6;C0ZvwNdYHS?cI$M1FSMOQ@jpa2ReQ@U_5n!w~YS5#AlsiRhMK839*D<2s&y~cF0D(Z%T^(PH0WOj?I?;{-*V>t&HFNcrfuV{TkyO?@f*F-~w~0 z&|+pxk@Rj6ia#c2DLJ2D5lNUqer3{?koRcsA5oJK=gWXuLb;Cb2@%Bi`RP`qXA$ZV zQd4g<`8EBrQ>gXVj1Wrs4jgL7pS_Mm1ev8d>D|G*vxy=^5{^)QiGuQkc)|$3-XFvh z6aNNvT(Efme}|@=bA$9AEavBnlcWO#{Q}|LKLNZUqbmMPC`r5ujv(YB{6%^p;U3}L zk&Ji&5=RIX2%Y@`zWSJYgxP-Gd49gAOW^(A@MXd~T1ZXFFR1*Kkb}^T%%bFF@v5+* zaVnt&WtAvfjD-jn2|5bn6+#RlAL(M$*+9IoS8D(K23^RzMyRNpa-<=y!>zBsWS)ak zgwH9cK)MT|2l0V~I^=(gd`tQ7h$KCPRCWB7@QQe5eBswNEEk+V@6H-u52j5a$ z?_U81*tGYzjUPXXll*vpe91|F`ssI+S0nvId;HPA@L{Y)xI$iE!g1o?5%{`go{(NZ zctzTK3F-#v2w4fk$vlkxsCeD0K*B$IkoWFbMcF<-F_L&yzit)3PJetzUU%v=B}{VS z?nhQh5LdQrWhZV*xv+$BTcUENoKZVGu0!qFPF(uB1D&|J^(N<fwkTmZ5A0H>3x#D<8+?9(r!e$P8(>8AX+fNh3 tu5_Fd@yi@%S%TR5iJg4$;}bc1o5wC~>%56g(assd)iTC6Z|}4@{eQR$BGmu@ diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.po b/engine/core/locale/th_TH/LC_MESSAGES/django.po index 533e29b7..1553bfd9 100644 --- a/engine/core/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/core/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1112,7 +1112,7 @@ msgstr "ข้อมูลที่เก็บไว้ในแคช" msgid "camelized JSON data from the requested URL" msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" @@ -2724,6 +2724,67 @@ msgstr "ติดต่อเรา" msgid "About Us" msgstr "เกี่ยวกับเรา" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "ผู้ดูแลระบบเว็บไซต์ Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "แดชบอร์ด" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "รายได้ (รวม, 30 วัน)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "รายได้ (สุทธิ, 30 วัน)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "การคืนสินค้า (30 วัน)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "คำสั่งซื้อที่ดำเนินการแล้ว (30 วัน)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "ยอดขายเทียบกับการคืนสินค้า (30 วัน)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "กรอส" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "การคืนสินค้า" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "ข้อมูลไม่เพียงพอสำหรับการสร้างแผนภูมิ" + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "ลิงก์ด่วน" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "ไม่มีลิงก์ให้ใช้" + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "สินค้าที่ลูกค้าต้องการมากที่สุด" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "ยังไม่มีข้อมูล" + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "สินค้าที่ได้รับความนิยมมากที่สุด" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2932,7 +2993,7 @@ msgstr "ต้องกำหนดค่าพารามิเตอร์ NO msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "ขนาดของภาพไม่ควรเกิน w{max_width} x h{max_height} พิกเซล!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2940,7 +3001,7 @@ msgstr "" "จัดการคำขอสำหรับดัชนีแผนผังเว็บไซต์และส่งคืนการตอบสนองในรูปแบบ XML " "โดยตรวจสอบให้แน่ใจว่าการตอบสนองมีหัวข้อประเภทเนื้อหาที่เหมาะสมสำหรับ XML" -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2950,16 +3011,16 @@ msgstr "" " ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-" "Type สำหรับ XML" -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "ส่งคืนรายการของภาษาที่รองรับและข้อมูลที่เกี่ยวข้อง" -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "ส่งคืนพารามิเตอร์ของเว็บไซต์ในรูปแบบอ็อบเจ็กต์ JSON" -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2967,11 +3028,11 @@ msgstr "" "จัดการการดำเนินการแคช เช่น " "การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "จัดการการส่งแบบฟอร์ม 'ติดต่อเรา'" -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2979,15 +3040,15 @@ msgstr "" "จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST " "ที่เข้ามา" -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "จัดการคำค้นหาทั่วโลก" -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน" -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2996,31 +3057,31 @@ msgstr "" "ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" " หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid เป็นข้อมูลที่จำเป็น" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "คำสั่งซื้อสินค้าไม่มีอยู่" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "สินค้าตามคำสั่งซื้อไม่มีสินค้า" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "ไม่พบไอคอนเว็บไซต์" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3029,7 +3090,7 @@ msgstr "" "favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " "จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3039,10 +3100,14 @@ msgstr "" "ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " "โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "ส่งคืนเวอร์ชันปัจจุบันของ eVibes" +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "ส่งคืนตัวแปรที่กำหนดเองสำหรับแดชบอร์ด" + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.mo b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo index d96958d592501c0772585ffd7629c5e149d6476a..3f2344469797f22b9866ee7b9b355cd0e849ec1e 100644 GIT binary patch delta 14949 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 delta 13955 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 WF1{b+NnhMK*b}jPS+M6ur~d;Ew*I^T diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.po b/engine/core/locale/tr_TR/LC_MESSAGES/django.po index 97ad9f52..6133fae8 100644 --- a/engine/core/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/core/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1134,7 +1134,7 @@ msgstr "Önbelleğe alınmış veriler" msgid "camelized JSON data from the requested URL" msgstr "İstenen URL'den kameleştirilmiş JSON verileri" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir" @@ -2765,6 +2765,67 @@ msgstr "Bize Ulaşın" msgid "About Us" msgstr "Hakkımızda" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site yöneticisi" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Gösterge Tablosu" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Gelir (brüt, 30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Gelir (net, 30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "İadeler (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "İşlenmiş siparişler (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Satışlar ve İadeler (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Brüt" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Geri dönüşler" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Grafik için henüz yeterli veri yok." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Hızlı Bağlantılar" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Bağlantı mevcut değil." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "En çok istenen ürün" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "No data yet." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "En popüler ürün" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2981,7 +3042,7 @@ msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Resim boyutları w{max_width} x h{max_height} pikseli geçmemelidir!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2989,7 +3050,7 @@ msgstr "" "Site haritası dizini için isteği işler ve bir XML yanıtı döndürür. Yanıtın " "XML için uygun içerik türü başlığını içermesini sağlar." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2999,18 +3060,18 @@ msgstr "" " işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-" "Type başlığını ayarlar." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Desteklenen dillerin bir listesini ve bunlara karşılık gelen bilgileri " "döndürür." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Web sitesinin parametrelerini bir JSON nesnesi olarak döndürür." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3018,11 +3079,11 @@ msgstr "" "Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama" " gibi önbellek işlemlerini gerçekleştirir." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Bize ulaşın` form gönderimlerini işler." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3030,15 +3091,15 @@ msgstr "" "Gelen POST isteklerinden gelen URL'leri işleme ve doğrulama isteklerini " "işler." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Küresel arama sorgularını işler." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "Kayıt olmadan bir işletme olarak satın alma mantığını ele alır." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3046,31 +3107,31 @@ msgstr "" "Bir siparişle ilişkili bir dijital varlığın indirilmesini yönetir.\n" "Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid gereklidir" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "sipariş ürünü mevcut değil" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "dijital varlık indirilmeden önce siparişin ödenmesi gerekir" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Sipariş ürününün bir ürünü yok" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "favicon bulunamadı" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3078,7 +3139,7 @@ msgstr "" "Bir web sitesinin favicon'u için istekleri işler.\n" "Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3089,10 +3150,14 @@ msgstr "" "yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` " "fonksiyonunu kullanır." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "eVibes'in geçerli sürümünü döndürür." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Gösterge Tablosu için özel değişkenleri döndürür." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.mo b/engine/core/locale/vi_VN/LC_MESSAGES/django.mo index 47c4ec97a058017db264bc0dbe8a386f527be1e0..eb9a975907fd1b8f1a95bd9d6321dc33bd04384f 100644 GIT binary patch delta 15063 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 delta 13959 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 We0e~KCt>-_5Ko0YKZSVqjr%_@{Zak^ diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.po b/engine/core/locale/vi_VN/LC_MESSAGES/django.po index 8da3e98b..d1da1ab4 100644 --- a/engine/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/core/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1156,7 +1156,7 @@ msgid "camelized JSON data from the requested URL" msgstr "" "Dữ liệu JSON đã được chuyển đổi sang định dạng JSON từ URL được yêu cầu." -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "Chỉ các URL bắt đầu bằng http(s):// mới được phép." @@ -2796,6 +2796,67 @@ msgstr "Liên hệ với chúng tôi" msgid "About Us" msgstr "Giới thiệu về chúng tôi" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Quản trị viên trang web Django" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "Bảng điều khiển" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "Doanh thu (tổng, 30 ngày)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "Doanh thu (ròng, 30 ngày)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "Hoàn trả (30 ngày)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "Đơn hàng đã xử lý (30 ngày)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "Doanh số bán hàng so với hàng trả lại (30 ngày)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "Trả hàng" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "Chưa có đủ dữ liệu để tạo biểu đồ." + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "Liên kết nhanh" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "Không có liên kết nào có sẵn." + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "Sản phẩm được mong đợi nhất" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "Chưa có dữ liệu." + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "Sản phẩm phổ biến nhất" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3011,7 +3072,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Kích thước hình ảnh không được vượt quá w{max_width} x h{max_height} pixel!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3019,7 +3080,7 @@ msgstr "" "Xử lý yêu cầu về sơ đồ trang web (sitemap index) và trả về phản hồi XML. Nó " "đảm bảo rằng phản hồi bao gồm tiêu đề loại nội dung XML phù hợp." -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3029,17 +3090,17 @@ msgstr "" "lấy phản hồi chi tiết phù hợp của sơ đồ trang web và đặt tiêu đề Content-" "Type cho XML." -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Trả về danh sách các ngôn ngữ được hỗ trợ và thông tin tương ứng của chúng." -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "Trả về các tham số của trang web dưới dạng đối tượng JSON." -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3047,27 +3108,27 @@ msgstr "" "Xử lý các thao tác bộ nhớ đệm như đọc và ghi dữ liệu bộ nhớ đệm với khóa và " "thời gian chờ được chỉ định." -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "Xử lý các biểu mẫu liên hệ." -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "Xử lý các yêu cầu xử lý và xác thực URL từ các yêu cầu POST đến." -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "Xử lý các truy vấn tìm kiếm toàn cầu." -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "" "Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng" " ký." -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3077,32 +3138,32 @@ msgstr "" " lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được " "trả về để thông báo rằng tài nguyên không khả dụng." -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid là trường bắt buộc." -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "Sản phẩm không tồn tại" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "Bạn chỉ có thể tải xuống tài sản kỹ thuật số một lần." -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "" "Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số." -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "Sản phẩm đặt hàng không có sản phẩm." -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "Biểu tượng trang web không tìm thấy" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3112,7 +3173,7 @@ msgstr "" "không được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài " "nguyên không khả dụng." -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3123,10 +3184,14 @@ msgstr "" "Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng " "HTTP." -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "Trả về phiên bản hiện tại của eVibes." +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "Trả về các biến tùy chỉnh cho Bảng điều khiển." + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo index 9afa46910c1e0c3b390f6a98135e20d2f772056c..e58afefc80773070799c337d4b65af78b6af17f3 100644 GIT binary patch delta 14882 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 delta 13940 zcmYk@37k*W|Htt&48|~)!5G_^8S5~^SjRpX`GM z%TkJplp>X6DNE=V`M=)Z^YMTD?&ERhc|MlewKbe0PcP`+brlJF6ujO1m%#VdI9+zS*%#NR-`hA5B8OV<7)QTBs3mwB1I(gZNM#uw z#FE&vjdQDTDrU#RZJo=FF{qiUi0wH+L)5+SLOYfNU&1%ZPkD^{2ur7PES4g@gL7wT zf2WgkAC`dw^z6q?N?fkL zbGNX`0Ou-`uQd>f2jflR7Y8}lgLuIc&b8!tzh-cO#K}Yb01pjwZWQ@Z!o+-%0zBZ@_$TrE&)qS@i%L8tU^2jlW{F-Nxnoq z6=$&&W|`{uD~pN5?NRN4Y1Z%t)**2Mi(>eHI0=?9(@-bwkHNp}|-J$0Ij;z%8NDmBh=){p0?^RBSSxg0oRCkRwO>tZ?u)U+!%-)G7DI6b>H=4zj{o{o%)i#;eG)prQPfR!8nwe! z)DAaLC;l5X17WkhMN$0|QET1^wKN&1C7fjK&!Lv&b=1IjqRxA4HuJBMT(Ax|un2Ls zIo^_}_S&c&TcQTk3lni5>ZW`Fb;8{ie}#Ipy1D*Cs5a^X#-c7@mbo-QMI&C1I=~Lp z6@88x@kP{$@1jN={J+O##Da6 zs#t!WUy7bsgLp9N1h1g3U@L0C`!EboqV9q3P&d_OjKjY$3=7Zq$BD%%#9dGWn1>83 z;1*M9NMajm#CK3vmi-xjS4X4blBfe#vA7QAByNKV*acH?2EKtiQT_WY@H3Zz)rqHJ zHr$G}^!)FnQkTRH)CiLn`Zey0<%u&;SM)rV#jU6leT#Z8 zs0&zxZE+1wz-y?_A2;w>KcbVUDL#YE@Dl0@D?R6Dq892vsi>t%M-A|4%z^KsmS!ia z-x1V6zr%`H;CcUPnTlG{kr-%6k&p(fBuNrXmB&eM2l}Cs7?MVO`X7I~2R)BCLs* zPTaHh8o)Hv2^V5sT!T8%7A%gtF&58aA_o4Uq8-b>=%4!(RL3T$sp^lq z@)@WBuEKn{4t0P`jKcG%6W+yIm}8}X8X975;?9^02cV8W0=Y*5ZUL1VBsQS#;&bLN zs42UKDH!sSzxirob>a+Eel<41uTV2qWED>a)b8Z9$ACu86uho1pr4K|QYhQTq);4Q!^hKaYA!R$(k2M?I$3P)ii` z3iGc6K1M~4O@ADSGqD2xip4Si8h=HVQ2kS|61GI$l#?(Gx1bJu3-y#FuJ!lKIMe{A zq6Yi|mc&(SnSZU>ha}_=sOLH4RUel_O<^n4nh!(`XeDX}wqsA+haIuRI)5*W#+GVF z-K6d{KLbgqd!Zd_sULqW;7>4`gw|vMR>2+SWz>tQ*z0~q(##R4{7S5Y`!E6TV`VJ+ zhQC?6paw7-b^P~G`<+8AMYh0tf8a`}M0ZrjS*QbV#`<^}t75qgetqEsBmBwY z(r@{JK8X#(~n)Vjk?Z#XsJ|FdK0Iwci{prRRSMmFy&TU}fBcjLcoPe3f^7 zdo2tnpNe{4v_d@%eJ~%6!Z4g^`DZXM@oLl?@@=ey`!NY`;!)1;V&CH<7_VSC9J$pm z$qGy$K7|eO0cytvnf|7F63Y^=#Pawt*2T-H87uR?pQ#>Lfp`X%z_(E6If8*yDmSQT zt*dPF2hPCK#7nUr?m}Jp9n=(tZ1*py9H_^$0G7feEQaZr8;7G#I0ZGcFJeyo6m|2S z+|K;#z`1t#H(V69B(99Q^2w;Rehqa6M^IOM8#T4XcKVOoil~`M#z^dg8pvqWg)Bnt zw-t47eT%w~=v~ae1`xB$uW9=iGpgS(jKK*Qhs#h`wgYqEC7gzTpw@c$ z2fp8GY(l&Tb&q8I(BGW715|YP7Q+JA05wG&P*>Co>*6!0r{oao<_!DDFI8*Q%uGVf z*lSoFKSRAYvh4O(-Vk+w9fq6+QW|en=}s7X>X1?-b$>M7`hnxPSx6K7&UT!7kdt;HKq zOZpK`U_iGpkVazYNv4a$X1q&$=#)Rv9!8_7JBFIFGpGYTKn*bTYo2XP#2DOwe6F}d zsD2~A@lVkNEJ!>H>vEnIsP-ZM&n(w*!h+CiI zI|A_#e%!|vKeG1Zo1W+ILfG+w@0Wa$&vxQ=Kl?vyZvBNpssFG1DUW>KOaAFv_Z##7 zfQB!AVNW!C*HZirzWP|@@qTsw*R8B z5i4-KBdDdijhe}PfB7pffr-SW15}czq+5exP0d_$5%wiss+beq#t7nn?)W!fPSz_I zaURq?P!vbdFA3M->U;k9soeTnqTv{a3sFlN*i0pv$|=;%6Z((;Fv(-4pw_w{>Hzbw z7;Z54qxSz1_2$gSy2u372^ynjA_HsUVrxI*4Y;4EG^gPo)D)$$9-4vnsJpu>YG4@_ zkGA%i*opi+Y=`HtAtwIok2f53ylt3*pP**wzm|`9sF?LHN@X$)NvJE?fEvIV)B%39 z_^QRXPy^#t6YQ4{HNe8Ce4NEqEUs&DYqK-zxP38ufXb7W7;DZzP2nPQJ=Q1QYd%0t zW!(^epfRWc1h5d!M_s@g)PUBbPPpCNZ}~4UppNIQ;S%b^w=Isy;&&{H`fw^|ab2uT z+yZstNvPw@viA8FFSqz*)J?m|@;fcRH%mw$II`oG_!e~qzgoxpX4b6!1mUPF$!~Ft z#br=yTh;PS%{JEF(d=gqN6pNXtbvf=Zz9iF!zR>$c9=)abLO9B)=+}3D%s@8YDr$%{<54H9ibXKh;_j%megbtRqfpQHMAQYWM(wu~^+G#{I_@ph zepz$)I0ChQ2_zqIrG3R!LLIP{b?A*c&_L9bEw=n_)VJLOs1L7esGGJ*n4gJOs1x+Y z{5TLbunFc<=JOb*=l^9Yn)ovya1Koi>>hxHpR&Bkl=fx8|p;! zQ5UitH8UStd>ZwBxsRHeB)${`fB&yfMN`xYOJOH0fs;@jm!nR&9tYx0?1^1-`vGO5 zuJi*;#p4)`x%p_+fD5Ar7K56}im02f3kIM6N!B4?E<|-)iMo;lSOqUzd$Bwr!GHNI zk2T0oM%{#4P#5wE>M=f!+W#li33KEP3BIxuPy?Hum*-zoKZk@y_zvpIKd|@=mL&cK zHFeqY`4iPd?bp&AjXKdvbB}q^49oA^lTa7Z0d;}1^Yi?xvc)=_wT6dgg-E|+XVeL& zSiBB(MTb#Wav8N$f10j`+zq}x z49rD6mYc2pd-F2JlD~smvcge*zZBGo+M)*12{n)j$oT?pm37#N!KLsG?kwtNx@7SU z)C~NKnxVpcW7T`00&3tLQ77t$x_}JSl}^MM+=#k>!>9}R1FPxzFA?oWo{r6F7=t?C z2dEPrMjiMpYCsn(zJls^(|l;=F5>qqf@)7RYn#o?j*|1cewG-HI?)u=l+U#M3e-Se zM_tJd%YS2DMD_pE;_OBJOcg-o6V1k`0d+G6VL*v7mI#;&G5GwWru+bE%Fda&iurtP z)Xmlb`{4-G+MclX+o%hQ;NR?Zo`R@*AP$>gT5+ELW>n^p(Au0pJtlWiJ67ULzplIn zDsF)q&|~Ic)Qrruc&)k1Jc+uHE2w@^G5(844NNCai{bg#t92O(eZ{(f8d*tx35dsm zs2!iiL|l)$l2fRGokv~qEz|`>$9fy0@`KGq=2r7G>P2)vV2Mg`exx1E>E@f}SEvI% zM4hN~ypP+UmS8k0zX-Kd+b|U`qMm|MrM#U`GcpI&FYvB4{9p}vOZ$d8s87AY7O%GW zsQItutCsOg)(_Qxg?S8h;)kdcC6^5e{^6nzYGAJ-pPm7Cfl56R<;r;nVz7h77f>Iw zG3EUM2BP8(7GJYCIl=EY!Q76Tu{)@HrdS1Ub<`5J#bSE?dst!u>KBQpEIx@^;~!Bs z-%ZQ^jXGfViauWwb){ud1Mh126{z>cD;94=E!7s(0FGfK=XYl;amBo6W=r$~h(xVf z8M8gkC7z01F-wxaNqe9MG8r|%O{jZfzj+1q_!X$+2T}tAy1UbRPi8H7fh)(u16>lb>W*|A4=U-D&pM*}(-8wvJ z@mSP==AsU?8THugwD@<_ez#F4%u&S;q&aFJL(F;R2GnQ6A=Hw7QzhW<&T}L*qFhz| zj?t(qPeBc!y*UZB<62bz4XA;=kLte%b%N8V8N7rM_y9GaT-Cf4P#@PV15|W?@z@y^ zYpuUVO{uHy2N;h!VSCgS_r@|f3U#98*8VnDCf>D+cKi-?r4La3qf&goCfI^_h{an`$32b3F-t8!;F4xjOwjW` zjEY9Q3`6iE$|cG}1#DsbN$wY4bwjZSadvCdukD?wKSL=)zB@(Bm4|YW5>7cq8xM+$ zqD-KyBli;Wrf1Xh$JU>q6>gynW{Wa+8=Fg z$UjDDW;w3Sb)bAj(e@iObHf%5uuj#Q&wVp|0&!>ia0esZZks zsnqXKXQ|yLb+BzS)_4?PN7^@1{&x#Z5W9Hkm9k%+uU{C+!3*JA$U%9@dak@1;Vg5!glhT<3=ETYP7UrV- zN}mv%f-7(aZQAmf)6F@wHKb@uvYg(SdC7%R-sb(|hEiE&o!-YWR@dFVOnchag#+B8 ztuCcD^>J7Xzp(aqkq=QffZQ0$63a(XZ%_UWi}jRfYfHX6@1Ni{h@c+zaYT<>F52WT zbHV?ppa6a9P=@M zz?PUnxlDZ=9YLp+oCc}yYJ_Kt^t|0glq0+B?=)07t|+J@T>s?XOC+nPVBp#DxY zg?=~L=UvKB>hs9ur|46zsU2e>Z3QUJC_Ty7()E8splvLri`8S<;W_F>Y{%WSt)Y}8 z*B1G-4sJ6%?g4RL>KWGmN9vzb3X;EKeP+?tj&hQ?8~K94yyl-RhKA83zoYab-btB7 z`JK2fZHK69>q>lva+>;o$VX5=K%Fnc!L1Fsr>MP0yn(Wo`m2;7l$(@CTQ%#SqUV1s zJH^rRBxM?LaY{J3xy0X7_7gX!XiFzwi25ArcknG7P42F>M^k@|++cjPwW2MIU>LcP z)c>OJ71MwI=OTIeQBRZKmRwfKAj-=WZKpi^QJUX`$vsQa7mO2@7g3Z5j+cq|D9=zn zv;8AYQf|9`u>Gs`uT8^x%8MkL*r;y@oBfYnFob+rJ3v0`Q-}O(82!HWhYJ2n>PG4XX+Iy#vHn@?fN#=Sn{J6=)C*uPCD_vF^Ae7sd_dVjdku0= z;Ge|nY~LpMht>1oV9Il}XQOnX9H(fjL}^J|7Q6p~$w@X41sf>;(4i2y8`LXXTRc8c z2ixk^=ueyP@-_OMT$ZOl``Tw8!t&b8HtsYJNP3!S=Nbs8))4>5=q(ko|>B$8G$uxH) zvzAOJiO$Q ziKTrPPV?)pe?;;Bu3d|r9&Kf*r&4NCj?jLVhI*78l$qA=ck0=xzlYk+c!K}GLl5@( ziFglIwY>P8I1AKhG7mrcO(^iV2t+(X-?s+=jro>Z5kgP(kI7QoMlxHcuX=_N^D_Dv0Ek#>p zJV!~VR3NTOpUu=O2V4D*i|{15^OOcUDO*13+5#Q)ljJv$LK#9sec~r6qo_}&v?Ko! zRV-8{ix#8e$XsYxkA$xT0P$yvDm0R)qL9Q@he>PK;b z)hFUT`dzj75%n}k3kKl{JMgF2nsScZc*=3=pHLF$e~Wk(Q z`>CZO7Pl>znbCGxNM?b@CWmCc*nVN@C3&BVS<-EMmnEmiCoicyp>SsJ376Y1X@B^i z%mJVF3e7xtd`I|_H%=#JMw}TFlDX{LK_QtrzFSv($?m&tmL%UxT=7%ckb+Cr-7A=R J{NBd2{{!pI<0}9F diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po index 1bcbbe70..4fba80fb 100644 --- a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1059,7 +1059,7 @@ msgstr "缓存数据" msgid "camelized JSON data from the requested URL" msgstr "从请求的 URL 中获取驼峰化 JSON 数据" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 msgid "only URLs starting with http(s):// are allowed" msgstr "只允许使用以 http(s):// 开头的 URL" @@ -2565,6 +2565,67 @@ msgstr "联系我们" msgid "About Us" msgstr "关于我们" +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django 网站管理员" + +#: engine/core/templates/admin/index.html:19 +msgid "Dashboard" +msgstr "仪表板" + +#: engine/core/templates/admin/index.html:25 +msgid "Revenue (gross, 30d)" +msgstr "收入(毛额,30d)" + +#: engine/core/templates/admin/index.html:34 +msgid "Revenue (net, 30d)" +msgstr "收入(净额,30d)" + +#: engine/core/templates/admin/index.html:43 +msgid "Returns (30d)" +msgstr "返回 (30d)" + +#: engine/core/templates/admin/index.html:52 +msgid "Processed orders (30d)" +msgstr "已处理订单 (30d)" + +#: engine/core/templates/admin/index.html:65 +msgid "Sales vs Returns (30d)" +msgstr "销售与退货 (30d)" + +#: engine/core/templates/admin/index.html:82 +msgid "Gross" +msgstr "毛额" + +#: engine/core/templates/admin/index.html:87 +msgid "Returns" +msgstr "返回" + +#: engine/core/templates/admin/index.html:94 +msgid "Not enough data for chart yet." +msgstr "图表数据尚不充足。" + +#: engine/core/templates/admin/index.html:103 +msgid "Quick Links" +msgstr "快速链接" + +#: engine/core/templates/admin/index.html:110 +msgid "No links available." +msgstr "没有链接。" + +#: engine/core/templates/admin/index.html:119 +msgid "Most wished product" +msgstr "最希望的产品" + +#: engine/core/templates/admin/index.html:128 +#: engine/core/templates/admin/index.html:144 +msgid "No data yet." +msgstr "尚无数据。" + +#: engine/core/templates/admin/index.html:135 +msgid "Most popular product" +msgstr "最受欢迎的产品" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2770,53 +2831,53 @@ msgstr "必须配置 NOMINATIM_URL 参数!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!" -#: engine/core/views.py:73 +#: engine/core/views.py:77 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "处理网站地图索引请求并返回 XML 响应。它确保响应包含适当的 XML 内容类型标头。" -#: engine/core/views.py:88 +#: engine/core/views.py:92 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "处理网站地图的详细视图响应。该函数处理请求,获取相应的网站地图详细响应,并将 Content-Type 标头设置为 XML。" -#: engine/core/views.py:123 +#: engine/core/views.py:127 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "返回支持语言及其相应信息的列表。" -#: engine/core/views.py:155 +#: engine/core/views.py:159 msgid "Returns the parameters of the website as a JSON object." msgstr "以 JSON 对象形式返回网站参数。" -#: engine/core/views.py:174 +#: engine/core/views.py:178 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "处理缓存操作,如使用指定的键和超时读取和设置缓存数据。" -#: engine/core/views.py:201 +#: engine/core/views.py:205 msgid "Handles `contact us` form submissions." msgstr "处理 \"联系我们 \"表单提交。" -#: engine/core/views.py:222 +#: engine/core/views.py:226 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "处理来自传入 POST 请求的处理和验证 URL 的请求。" -#: engine/core/views.py:262 +#: engine/core/views.py:266 msgid "Handles global search queries." msgstr "处理全局搜索查询。" -#: engine/core/views.py:277 +#: engine/core/views.py:281 msgid "Handles the logic of buying as a business without registration." msgstr "处理未注册企业的购买逻辑。" -#: engine/core/views.py:314 +#: engine/core/views.py:318 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2824,31 +2885,31 @@ msgstr "" "处理与订单相关的数字资产的下载。\n" "此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" -#: engine/core/views.py:325 +#: engine/core/views.py:329 msgid "order_product_uuid is required" msgstr "order_product_uuid 为必填项" -#: engine/core/views.py:332 +#: engine/core/views.py:336 msgid "order product does not exist" msgstr "订单产品不存在" -#: engine/core/views.py:335 +#: engine/core/views.py:339 msgid "you can only download the digital asset once" msgstr "您只能下载一次数字资产" -#: engine/core/views.py:338 +#: engine/core/views.py:342 msgid "the order must be paid before downloading the digital asset" msgstr "在下载数字资产前必须支付订单费用" -#: engine/core/views.py:344 +#: engine/core/views.py:348 msgid "the order product does not have a product" msgstr "订单产品没有产品" -#: engine/core/views.py:381 +#: engine/core/views.py:385 msgid "favicon not found" msgstr "未找到 favicon" -#: engine/core/views.py:386 +#: engine/core/views.py:390 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2856,7 +2917,7 @@ msgstr "" "处理网站的 favicon 请求。\n" "该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" -#: engine/core/views.py:398 +#: engine/core/views.py:402 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2865,10 +2926,14 @@ msgstr "" "将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " "`redirect` 函数来处理 HTTP 重定向。" -#: engine/core/views.py:411 +#: engine/core/views.py:415 msgid "Returns current version of the eVibes. " msgstr "返回 eVibes 的当前版本。" +#: engine/core/views.py:494 +msgid "Returns custom variables for Dashboard. " +msgstr "返回 Dashboard 的自定义变量。" + #: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html index 7f213e36..51f9dafc 100644 --- a/engine/core/templates/admin/index.html +++ b/engine/core/templates/admin/index.html @@ -1,6 +1,5 @@ {% extends 'admin/base.html' %} - -{% load i18n %} +{% load i18n unfold %} {% block title %} {% if subtitle %} @@ -15,38 +14,58 @@ {% endblock %} {% block content %} -

-

{% trans "Dashboard" %}

+ {% component "unfold/components/container.html" %} + {% component "unfold/components/title.html" %} + {% trans "Dashboard" %} + {% endcomponent %} -
-
-
{% trans "Revenue (gross, 30d)" %}
-
{{ revenue_gross_30|default:0 }}
-
-
-
{% trans "Revenue (net, 30d)" %}
-
{{ revenue_net_30|default:0 }}
-
-
-
{% trans "Returns (30d)" %}
-
{{ returns_30|default:0 }}
-
-
-
{% trans "Processed orders (30d)" %}
-
{{ processed_orders_30|default:0 }}
-
+
+ {% component "unfold/components/card.html" %} + {% component "unfold/components/text.html" %} + {% trans "Revenue (gross, 30d)" %} + {% endcomponent %} + {% component "unfold/components/title.html" %} + {{ revenue_gross_30|default:0 }} + {% endcomponent %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} + {% component "unfold/components/text.html" %} + {% trans "Revenue (net, 30d)" %} + {% endcomponent %} + {% component "unfold/components/title.html" %} + {{ revenue_net_30|default:0 }} + {% endcomponent %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} + {% component "unfold/components/text.html" %} + {% trans "Returns (30d)" %} + {% endcomponent %} + {% component "unfold/components/title.html" %} + {{ returns_30|default:0 }} + {% endcomponent %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} + {% component "unfold/components/text.html" %} + {% trans "Processed orders (30d)" %} + {% endcomponent %} + {% component "unfold/components/title.html" %} + {{ processed_orders_30|default:0 }} + {% endcomponent %} + {% endcomponent %}
-
+
{% with gross=revenue_gross_30|default:0 returns=returns_30|default:0 %} {% with total=gross|add:returns %} - + +
+ {% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Most wished product" %} + {% endcomponent %} + {% if most_wished_product %} + + {{ most_wished_product.name }} + {{ most_wished_product.name }} + + {% else %} + {% component "unfold/components/text.html" %} + {% trans "No data yet." %} + {% endcomponent %} + {% endif %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Most popular product" %} + {% endcomponent %} + {% if most_popular_product %} + + {{ most_popular_product.name }} + {{ most_popular_product.name }} + + {% else %} + {% component "unfold/components/text.html" %} + {% trans "No data yet." %} + {% endcomponent %} + {% endif %} + {% endcomponent %} +
+ + {% endcomponent %} {% endblock %} diff --git a/engine/core/views.py b/engine/core/views.py index 286fde27..1ab9528f 100644 --- a/engine/core/views.py +++ b/engine/core/views.py @@ -2,6 +2,7 @@ import logging import mimetypes import os import traceback +from contextlib import suppress import requests from django.conf import settings @@ -9,8 +10,10 @@ from django.contrib.sitemaps.views import index as _sitemap_index_view from django.contrib.sitemaps.views import sitemap as _sitemap_detail_view from django.core.cache import cache from django.core.exceptions import BadRequest +from django.db.models import Count, Sum from django.http import FileResponse, Http404, HttpRequest, HttpResponse, HttpResponseRedirect, JsonResponse from django.shortcuts import redirect +from django.urls import reverse from django.utils.decorators import method_decorator from django.utils.http import urlsafe_base64_decode from django.utils.translation import gettext_lazy as _ @@ -44,7 +47,7 @@ from engine.core.docs.drf.views import ( SEARCH_SCHEMA, ) from engine.core.elasticsearch import process_query -from engine.core.models import DigitalAssetDownload, Order, OrderProduct +from engine.core.models import DigitalAssetDownload, Order, OrderProduct, Product, Wishlist from engine.core.serializers import ( BuyAsBusinessOrderSerializer, CacheOperatorSerializer, @@ -52,8 +55,8 @@ from engine.core.serializers import ( LanguageSerializer, ) from engine.core.utils import get_project_parameters, is_url_safe -from engine.core.utils.commerce import get_revenue, get_returns, get_total_processed_orders from engine.core.utils.caching import web_cache +from engine.core.utils.commerce import get_returns, get_revenue, get_total_processed_orders from engine.core.utils.emailing import contact_us_email from engine.core.utils.languages import get_flag_by_language from engine.payments.serializers import TransactionProcessSerializer @@ -419,6 +422,58 @@ def dashboard_callback(request, context): returns_30 = get_returns() processed_orders_30 = get_total_processed_orders() + quick_links: list[dict[str, str]] = [] + with suppress(Exception): + quick_links_section = settings.UNFOLD.get("SIDEBAR", {}).get("navigation", [])[1] # type: ignore[assignment] + for item in quick_links_section.get("items", []): + title = item.get("title") + link = item.get("link") + if not title or not link: + continue + if str(title).lower() == "dashboard": + continue + url = str(link) + quick_links.append({"name": str(title), "href": url}) + + most_wished: dict[str, str | int | float | None] | None = None + with suppress(Exception): + wished = ( + Wishlist.objects.filter(user__is_active=True, user__is_staff=False) + .values("products") + .exclude(products__isnull=True) + .annotate(cnt=Count("products")) + .order_by("-cnt") + .first() + ) + if wished and wished.get("products"): + product = Product.objects.filter(pk=wished["products"]).first() + if product: + img = product.images.first().image_url if product.images.exists() else "" + most_wished = { + "name": product.name, + "image": img, + "admin_url": reverse("admin:core_product_change", args=[product.pk]), + } + + most_popular: dict[str, str | int | float | None] | None = None + with suppress(Exception): + popular = ( + OrderProduct.objects.filter(status="FINISHED", order__status="FINISHED", product__isnull=False) + .values("product") + .annotate(total_qty=Sum("quantity")) + .order_by("-total_qty") + .first() + ) + if popular and popular.get("product"): + product = Product.objects.filter(pk=popular["product"]).first() + if product: + img = product.images.first().image_url if product.images.exists() else "" + most_popular = { + "name": product.name, + "image": img, + "admin_url": reverse("admin:core_product_change", args=[product.pk]), + } + context.update( { "custom_variable": "value", @@ -426,6 +481,9 @@ def dashboard_callback(request, context): "revenue_net_30": revenue_net_30, "returns_30": returns_30, "processed_orders_30": processed_orders_30, + "quick_links": quick_links, + "most_wished_product": most_wished, + "most_popular_product": most_popular, } ) diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.mo b/evibes/locale/ar_AR/LC_MESSAGES/django.mo index e4dc80283f1599ff688eaf06700857f9b97692fe..18857fd2b73f1b553389751986a70d246b30af66 100644 GIT binary patch delta 1101 zcmX}rOKeP09LMqhbf$w*j2cS4E;SydW20ixZm_CW&7xFFBCShDUr8Sckr;~x>0%O! zL~KMCtu7?ZBuZjYiI}af+$Qyk1!*KCx?;iiH}}TLocp=woVoY>&;OiTI6mH-{ZJmc zXOtT1ChBm=tRBCYaG`t(o3+KvKI0nN^()Qdn8tP3j=S*+?!d>m3=0^=S>$o^g7%kS zd;wRRWo?n04g4Xx%4`KXxE52WiH@RP)Pj1^nV@|U576$#LpX+dejfGQ0!Hu;DsXi& zl_hX1R$-L+?MN`tfEyV&jZ1L|m*cg-5!A}=qb7P3w4Vm;=eUjjH@F191>--lh4$~D z{{+j{cq^7Nzn$aeENQ=h&j|5#x!HR9ukyCTco!@19oFKHz~pv+rEN%;bz>RkP%C|i z%H$+!VKd0j=DDQsFJ{$|s`CGkM&`C2)C#YoQl7(0_y9XG!bWpzJ*a?gqXI0TQvDGR z;xBB%>ZBjgWmF(HQDE7j=#RTm;7(xZBtDbX%xVsurQ*XnyUPN~w==V2fWw2@-Iz)Nm!6`ecelpPY)aS6RIC zQ>?VAgnf!v9cGK2a=SbFdR%9)&l&7=9rt9W-5qf9Z^OsRqRsv1-Tr~m%6M%oJ(TI_ zavC$eUHPW?Vj|{E&kcJM-nch8T9<50OwHZme!`n}yu3FxH{!kUp5$*NUxoewU2lFE delta 984 zcmZA0Pe_zO7{~Ev-E~dfbTijKxu#ifrIOOJMP!i#83ZM=6p1BXD)G`G@nFcFMEpY+ z@fJi7M2A3FEu(`VMg-ovbWqPBL68^0i{Ib8LkEYQ_p>vzJ2THS^SelNdW6c`jc zm|5O7_)^agw(%(LVG84w;X-NDL>EvKWqtbwW@-1}6?}>M{}O70YZ$|ysEz+ZrnW!W zg!`_YH*4V64Ro~O5$wTo>_tT~fSUM;Z@=*E2|PvrESBI$Kfa9jX|MYJ6k%$-5sNXv z$7H!3Kjqodbd^~h1KrGa6Z^3iU*jcQ^6nsWT60Ud@I_3}&Y>b3LS^nbDxgW^V{dtM z;JR<`qQ+}ZlYiE>3||!CEmVqgID&&Xj6aZ%WjJ7M=mBbjbEwq5!^^mWckwT3f$Kqd zr}|MFAHz)tAx6)J8+wF_>>0ko3Dm|D=R%vXnsx>wsC1Jo zw+Og3G_Inf)iEn`x_>TW-C#x7s6I+FRguN0x-5!T8&J_@ZKcMkC#g{?`~6>(aur3a zV^LvW?(NWh;@DkwiZOkSM-f%8-{Haqb)}6b0lUm7>JzS)M`0`aG%\n" "Language-Team: LANGUAGE \n" @@ -227,54 +227,62 @@ msgstr "" "## الإصدار\n" "إصدار API الحالي: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "قائمة الطعام" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "لوحة التحكم" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "الصحة" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "التكوين" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "المستخدمون" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "المجموعات" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "المنتجات" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "الفئات" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "العلامات التجارية" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "المدونات" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "المهام الدورية" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "لوحة المهام" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "الدعم" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "روابط سريعة" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "المستخدمون" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "المجموعات" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "الطلبات" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "المنتجات" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "الفئات" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "العلامات التجارية" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "المدونات" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo index 201ab0f4321ab25b0edd55b2e4978b67e9f6eb5d..ce634bf7765ee545c2e1335e69b9701e139e84d3 100644 GIT binary patch delta 1095 zcmX}rJ4};N7{>9pf&l>jDqNios3pR^XJ0cui+c5!lX zXoOW^a&c*5T%0hvIH&_U7}U5BV$^|29sED-2`4%IeeXFv_j6wMS)--BiKnij>mBU)&4W8-71#jU)01^$WYdZyRi*} zjBh=z;v6WnxBL3sb2Uxc1ui!?; zx9fadW7}`y3?sg3Fk{kodRJ+S2T&^*!TmUc2XP)Xp|_|Gmt4Gzn)nJf;u_MWRkG}D z*n$jYotV>^pK%2-R7V*X-*xdrJVE&!p2QER4r{&AooPkw*eTRR&!Ps1pe8zon$R4o z-2&2uJ@?puHC&=VXY&QMwLeiS`-eL7Ap5Gg9(7lm@fdcYCY*5fw{e(w8nx1o&R?hr zRO~Sepz740?%#US)>2Qai~SOcOdx*5%qqK0HNTo`e?$xj7L5hEkjSz z--pab@vMd)+K;f=>?5-Sd`z5ZGK=9LKEXVuaT@z@8SC*Y*5NMly6w66&^Ox7>L?ft)axQ*}IpRrtfh(x@zo8O5!3dtC690uvZ8!KFZ-dx3 z>tu8%H-_*bPGSSTLG5G~HSwH_mt4Gx-Q53x53uZ>f5*4P$L@ZDZR&X!)?y0ZampE7 z@mXm-ZbmXz`>cAT2~@_z*pK5lhzqEMKB6Z4;^Go2;WD=30Wzii#5TM_*0O)7Pu#%v z6{peHM0t1P6)K*=JQh&3@EJAXIckDy)JcWCYNAopgdQr\n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Verze\n" "Aktuální verze API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Nabídka" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Přístrojová deska" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Zdraví" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfigurace" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Uživatelé" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Skupiny" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produkty" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategorie" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Značky" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposty" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Pravidelné úkoly" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Podpora" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Rychlé odkazy" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Uživatelé" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Skupiny" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Objednávky" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produkty" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategorie" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Značky" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposty" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.mo b/evibes/locale/da_DK/LC_MESSAGES/django.mo index a4c0d85d9426327759ff58410d902519229a3ce3..27a26682443543fd5feabd58248d74da3ef9c3b3 100644 GIT binary patch delta 1095 zcmX}rNoW&M9LMp$wv9EWO{{fET{4=w)z(v85PFFAATDSRaY2PHPGd++Aj_c$<{~0` z40`IJ>O~Q})I$#*T@GIK=Anopq81Uw1yMx5zs#eLy!p&~GkNpg@6Al5ex_=#I-0K= zrH{IXdTD{#0DfA?f%3Y^>{Qt74KAZS&~6sPAzXo@xCJM$8*kxae2O7_f&ATGy7pUl zeGZqJ)$BVbac&4j&Dzkz<+vU7ph46?Y1BZcT|0yQvNM#1PN7eeS{mT+M}(*oswLf)|}vQ7gNFdeD?>-*@d9Tu=WKT!bIo^)HyF{oC~) zW!buZ0$X^#4Rdma*vD~_B|hp1Rxq+Qn0X16$YoU2lbFQEs0n^V4fq3<&|g$yt?Pmb zN0BazJ9ptK+G(sQ`hx4Yf*R;1YM{HW{Q!5;eu#?t8+KwZIV#E&2Sq)C%-zP3wb%sm zvuhk8cn@`b29@-)1o{8;h4?^TLk<(%*N$Fie-*_(debTAS+QabCG%Jr_;j_^=5JC^efWed6K m!?9#Evez$HviW?rknv0PVq#C*{%Wa`&G;T&xpMtZ;@5xiZf%?Z delta 983 zcmZA0yGtBV6vy!s9~+IY^|8js>T2SykHyL*i6%sBED}U5tQNr(u@oUTCdeRypcWR3 zU?FI0p$I0hY9VY|Q^mr@{R>1$lL!&?`MDxb$!xQHrk7VGd2s&pZCDs2K8yCspy*n4ENF?W6zRoNx@N1`&T#44Mjji!%Avt$hRoTepF=wt1sspJ&I_%SR_dk76&p^0g>icVSwO;u2( zR26*-(Rb|hr|I{59IAw(hnApe%~b9tnjeRkh12Dk58>3|YPh{Bla2Lf?qdJ$0T%vF A>i_@% diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.po b/evibes/locale/da_DK/LC_MESSAGES/django.po index cb1699be..ee14bc77 100644 --- a/evibes/locale/da_DK/LC_MESSAGES/django.po +++ b/evibes/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Version\n" "Nuværende API-version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Sundhed" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfig" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Brugere" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grupper" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produkter" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategorier" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Mærker" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogindlæg" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Periodiske opgaver" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Opgavetavle" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Støtte" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Hurtige links" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Brugere" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grupper" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Bestillinger" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produkter" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategorier" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Mærker" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogindlæg" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.mo b/evibes/locale/de_DE/LC_MESSAGES/django.mo index b14a8bb6324289ee2f707f82035ec687a7a82fc3..1292415d0c1af6c54c144ff5e7a73ed948646bf4 100644 GIT binary patch delta 1096 zcmX}rPi#z46vy#1opvytGODWT-y8L(WsnF7i!Nv-f=0Wj|3W%_+R2PJNoPh_FdGT6 zRJv@05({B52^N-85*s$sg@{IkG!`XR8j0_3=B6h(^Lh8(_wJu_-%NEsJ5c)ESbNuq zZRBe5ddRF3f7b9rdQI;1KfiTQ15?2y*GokIEPxeZZefM z;W})?2=iN)>o|m~=s1ZBv556}&3Oy8voX{}_gwp_Yrn(<_a|`y{&4-X*iZYfyWh*U z)qeu(nBUHGah9@Qz~9XHy0NaQvanYjsNUI(`X&;15YM4X`WSWQudoiMQAhV3RqB7p zkQSpXF-)SqnZ3wftT#dZRq7l!^ulHL;0@Hy?x0FN?%GdK3w@3|@h$4TIn;B}^=4PG z1+|ee=QwJfM;O8tq{i3xHy@k0qQ4T_oxTN~zjma-*N_@iCDt+MGEZ$U delta 984 zcmZA0KS&%w6vy#*{)_*ToW?W$IdgZ3dY&SPToM1Fh0!30SV#&HtE32|2wG`mNf)&V zNU9V85kXNDPD8{(JP<4_lr%!n(khKsfi!-9yJO?PyU)(@|$gB%ba`>VB$~7A=HrvA|^dpbV!kEHJ?8GJ<#d@5+ ze%~{zWpph!nz0ZEumnd?D;Y;k{MPlSTz?J|++V~8xapqn;u!q{cR#{1^}G)Au>mL8 zkh!c2^?Vqa(%xVk-y@5) zMby0CQR9E2r_7GI&_t)sKiEV63SVP=JV@{Zs>YvDD_KRAY6G>kS>zQvL!FIlBxfsR zo3yh@EX6idqCE-fudN+)H^xwzO=3HKL`}Sc8kfO2JVYhl`#f+E^??x#p`J0se+T?z zDs(|pX*E`f==}LBZ{qR=QKx&fIH5zM1Edu_CA3mC9o7_~5@>b&F|2{OYvkZJ%I_zy zPLj~hY1LYw&YN~H+RaZ6p*r7hs+n3d(MVJgs;g?~x6DQEyV9kha5}RPUJfsHB>FO6 H63NglDr!!E diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po index 7e059b87..16815035 100644 --- a/evibes/locale/de_DE/LC_MESSAGES/django.po +++ b/evibes/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -230,54 +230,62 @@ msgstr "" "## Version\n" "Aktuelle API-Version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menü" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Gesundheit" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfigurieren Sie" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Benutzer" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Gruppen" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produkte" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategorien" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Marken" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Regelmäßige Aufgaben" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Aufgabentafel" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Unterstützung" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Schnelle Links" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Benutzer" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Gruppen" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Bestellungen" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produkte" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategorien" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Marken" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.mo b/evibes/locale/en_GB/LC_MESSAGES/django.mo index 830b3e2180ef8066fca7e23cb44846ec35a6b9a1..b6239bb1a4b2528ecf8742cded626f3aebeb088b 100644 GIT binary patch delta 1086 zcmZvbO-NKx6vt1gQ%!!1W?x!)%RViGprDO0R1kd(COBqT5ZbdQOJUSS1i1-CW$vV}+@K}bPRP!vJG|9b~l9XRv5=bU->p7X!&jc4bxW3zSTL6p7;6! ztTh|6A1v1Mhg6MO6%24S+zWNkQK*gbP#c}|_!8VtJO~fM$57ADKs~nr%i$lW#+BqK ztA|an8KyYjj(Fh&Y@~1&E{CIVCA{gp12x%wsDmDQ{M6$~xS9MLxD0;w`Zt&-{_XkG zjIDY%tl)gRz@i)3`{5Nvd|8)t+_Ev5P8kcXZxTwIt;bZagRHpr0#)|`X1BJ?RVFp#;{7>&|tLGQ9^fU0XxEN~F~%EaPikG%0N9 zGtt$)p=(hX844qpqY!l!dZXbmF;#Z5GSyzZ7!`+04VeS!j?qHjKsZ$x9GJ*uCaeEn JD&;b>{{T^VXh;A6 delta 983 zcmZA0KS1LDjVjV7&)G1a726Pu{D{t1N+8PpbZF@sAG3<%=b7P{IFDsqEP5nLp= z1hN$z1i`i_B0^>-h0>uFp>z}6O2I+D&)w_d3-5jIcYoe{-{fgsq@{~g#9>6$~pY# zv81)OV1`%Z&pj6E4x&w~lHErw;1reY1?oBf z(9=MX=fOZRRNaY+Hj9e3gc@K2vsgt%dxVO%j*9jND%!uUZlX}K2~@JLQOS;?7BZRP z{cGT&J1~!`KcJ%hjEZi{ov)#y-FC-soRMr0Z7Y(je~<3hSZexE6aHQ>0Zk_A*Iux4 z#oR|H5x-^GYGqm_&#(@H# tHu}@_``vGRpne->`;z{Q&ZlBsbieKW4!w_VPQ~+k<@ooQb~elLU$>B>ORWF^ diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.po b/evibes/locale/en_GB/LC_MESSAGES/django.po index bdda740d..fd7251ea 100644 --- a/evibes/locale/en_GB/LC_MESSAGES/django.po +++ b/evibes/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -233,54 +233,62 @@ msgstr "" "## Version\n" "Current API version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Health" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Users" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Groups" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Products" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Categories" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Brands" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Periodic Tasks" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Support" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Quick Links" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Users" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Groups" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Orders" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Products" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Categories" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Brands" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.mo b/evibes/locale/en_US/LC_MESSAGES/django.mo index e14386d7ca6b046d5709c2d0610def2b0862cd3f..ed21c9febb77d2cfb89529651cd98fd3fa9925f2 100644 GIT binary patch delta 1086 zcmZvbOGs2<6vvOLQ%z>0X%BnMSK2#WCA1Nwq(wH=AeQ!^(rz_b3O<51&8Af?rw8qN z>}}!3pjAZDA}DAP7*a%3(jp-UvPHlDy$4qvJoEd`Io|V~@BiI(h|d z_617m-%tmr*@*svK?2&wD-}l6o(! zB!3nnw5`U~U+>?7ZDqCDBb`DMYA7kBAy6&eOv>!Sb>c1fZoCnf?Z9v# zSP2A*l~@C1LHk$5%Va_=d12#w(igZ*39K2{o$DTDdJkl}wuX3>NUl#<#@D)FQrObR zqRah5SE4XF6h<#bAv#*8e&+qf|^vtPux$`rAAU0Qs8nhCEg#-}{Vv!<(SZbppTZ#xN6brFX zuu>2N6%+%aMJhW%MD(ga2-w+(Y5YICW8=W=Z{MBUxtV8o{|;;nc$rAfy3so5ar$hQ zSub8?bD*7s%*Kn%PO*|YT548~ZCH&x*ot4V3Fom8w=fTPk=yOS)n{(}5-ZF+yW*sV zA7roupD~JgWx*fCQ4@8dCQ7@yAJf!>*o_OQ`;Slyyu=*5MlJjnnc5yPiU0lDGppm* zbzEr20vyCJ4x@H5j+*#~t7lxji1l1w!F=3zqoTb)Mf)2S?HwxGf37a1P_i*pvT0PZpHUn6lH~bo z;t_Y@JF1>WMLUOzZqtqLprYM(*F&jbJdBFA5=qv-NB3(kHNB`+{#md9EvDG7yhOn++)?nDtQ6}3-vJwokTk4C9z!SOy0 s`qK3Iy>GmrerxC0LXXjTRjiiox5J0fWbxWiGQGBvyg!_*$dtSlulZ(8umAu6 diff --git a/evibes/locale/en_US/LC_MESSAGES/django.po b/evibes/locale/en_US/LC_MESSAGES/django.po index 307f0d88..ac841f70 100644 --- a/evibes/locale/en_US/LC_MESSAGES/django.po +++ b/evibes/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Version\n" "Current API version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Health" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Users" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Groups" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Products" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Categories" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Brands" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Periodic Tasks" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Support" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Quick Links" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Users" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Groups" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Orders" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Products" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Categories" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Brands" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.mo b/evibes/locale/es_ES/LC_MESSAGES/django.mo index b6f036b2848670ab437855caa75a712a3bc5923e..cd452852d688e5a20bcf159c7feaba485c84f9fa 100644 GIT binary patch delta 1092 zcmX}rOKeP09LMqh^fA>@HEO)t;*Rkw9V8kO>7p^+ctpFXS2d~5TueG+eYNMtr_ns@{oQC1`(M2Iwqg%wTs{_dRgpE>in=iGbGCH5-hWeZu9`yPM6T*pDl51h?V@Zp1s-h|e*MuaVd7t*d`__vdh# zS=oMbv4#i2OU;&`hbu6N8YqS8XaLpGX;(jod#LAeAKpd1{~q<;9M<7q)Wp@uP!_}W zn7}aO+W~juAhvPiBrd{nT#T2U*HA0Fi5h6i)$h6b1B}!D3>)y9yZ;LZsQ+>8eJoq| zPhdUc+b|bHr2Q<;Gvd>h>IxpMtIqrluI9O~n8bg$1CuO66BP+m%6i%Qzp21!C3iX_pAA>L|Jx`43V`gF2kTCcKYopKF_xxko5x?YBW@`^Mg^w09ez7#!8tsbok7v`P-r;P1v~nam j8*S+GGucd`G}#{SY3|ME&ZK#%_~iD*Y^HK59t-^kyv%FC delta 984 zcmZA0KTK0m6vy#X{wWID0!4vV`mhyfkzmq+h$sUP0s|q$MA9^Ise_x5NkZO0AOR*o z*gjCKO}(sz?$w(L1Qh^djH1A-skY7{h1C zpDlCILRV20-#}N1_W7X%$EX?p#a`6g{cs_Sa^9IG(v_n$iKzY\n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Versión\n" "Versión actual de la API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menú" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Cuadro de mandos" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Salud" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Configurar" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Usuarios" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grupos" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Productos" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Categorías" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Marcas" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Tareas periódicas" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Ayuda" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Enlaces rápidos" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Usuarios" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grupos" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Pedidos" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Productos" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Categorías" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Marcas" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index 70d0f492..413ef38b 100644 --- a/evibes/locale/fa_IR/LC_MESSAGES/django.po +++ b/evibes/locale/fa_IR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -199,54 +199,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.mo b/evibes/locale/fr_FR/LC_MESSAGES/django.mo index a0d0a3d05a6f441fbfe6d3913ea08e56b855d1b3..4dbb7c1c5d175a6df5dfdb4d01e430ffe26b8678 100644 GIT binary patch delta 1092 zcmX}rOK1~O6vpwBri~^>O={IzUt?Nd)fRjeH(6CJ)P~wcdGF^DGDxJ6pQHp%M4yP^P77obMLulZpM4w^;F(B*55K( z2eFR08Zb-Z_c|`L4?(k25wnlDf_`$DSquko6=rZ7UdA?@#4x_V5WYfQx7U9ElmC1U z<7O56#myRi5L#}w6dhcNov4Klpe9PACOYl+&*NVD1>BGKQ18D*y*G#TxPVGrgDhoD zxDi`1#QN6lKj_7^JUD@iaSWH>72k2x&TgX?y6g8J`u!)kiSg&S2*3Hye`1>cZ-4v< z+t%~r*ueUBmYXw_{Tx1snmuduDsYK3xwUJ!8t>p9e2lyBD=ML8$D1&LO1K?Wu`Xou zmc%AZ;TFuG61|QU=CJ$R=o8GKGW&um^$*lU^QayC#gmxkZ6)>y^$Dg?rJhHX`VXqq z@q~9K98{tQQHk`U63Hg0ze;_B0hRP7w%{ZxfhnXY_7XM08`PoujJt6Gm2hXPw{RDZ z(C>3MvKnq1=n$p<}z;Csm=xuM??LktXnEiw8ZvB2F7wj!%knW nFkDT=rsCo5Vm?1u$hzf;aN!7f{3Ami&C5vaSBusEb_)$T`baB z=v4oKG!$&I_zCUiar}HNyLcx zfY|_^1o@%;2$@Zmnf=5^^rKZ~VeG_Oe2E?S23v6nAL1sK;1)97_FezbJtp%N%d6cUJ|UsrYARhPp-MFoA)<}=*T~Ip9KT-`b=nD4 zMw`@zb>DOsVz2lK5=r9!rn6M*B6N;*gpNTa^jkI`nyJ_r38%8F;lrAZbmDdPOJX2! E58RMYvj6}9 diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.po b/evibes/locale/fr_FR/LC_MESSAGES/django.po index f9f2507c..7c1b5f42 100644 --- a/evibes/locale/fr_FR/LC_MESSAGES/django.po +++ b/evibes/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -233,54 +233,62 @@ msgstr "" "## Version\n" "Version actuelle de l'API : {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Tableau de bord" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Santé" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Utilisateurs" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Groupes" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produits" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Catégories" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Marques" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Tâches périodiques" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Tableau des tâches" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Soutien" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Liens rapides" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Utilisateurs" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Groupes" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Commandes" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produits" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Catégories" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Marques" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.mo b/evibes/locale/he_IL/LC_MESSAGES/django.mo index 7770c980d828d13aab1a8c0d7df054ed2ce25767..26901e1a0ae72717b69d54c6eacd2d76d20bbf33 100644 GIT binary patch delta 1108 zcmX}rOGs2v9LMp$I*vJ-O`|i_*yH9jy_KM(pj;V&mZX$D=s}E4HCP%xdO##bZK6%6 z11&1aMHbO!Hg1D3+U2I(A|k6rNYH~;<)ZIz=FlJReC|1C?)jhdKlgrWnQk5W5DAPK zQO~uU>t>Nz6Mie^hxk}xb}VEzi`BH7s?5UJfiXWo?ayv} z4i}pZ*>7%^@rU3dvxVqk6dO>9cB3ZhL``(uwa?-<+C8`fCs5D7M?E)(0sM(1M#on=vp#$EflYfs^7`lqoBzq;`s*h%}3>u+b< z8b5-i=5)xC!q#r%?aaT&aza5KERnt-G{rev(5gW;eCewm+{wkpsqm}F2lu*YI;LP-vkP z&^B^$qWOxgM7_+aj>1!ZRX|Z%AiraM5yf2VTwgu1sr+u#rB6_nl7n^^e5EjiHXgOjozJFVoYV vYYYF3RE+vr|A9a5kNHnWb|ntP9{czFC$uK`>z2|?<-5A?{;_t*G?~RdR zrkF26W<$7H!w=&}*erk9>?bCOlg(x^Oyf0tgtsw=y*Q5z_yOy%fV^&BUA*eITEuN1R8kyNFlu z9jc-qJ^HT&zHvd8-2>ZrhxjjQqXcQIhaLC|@1qj_;w+j+~gi?0>MGm#u{p^ z+N^|h{(=p3g4ru5i!OIDwPA#*!=kdQv>H0BX{HWk2Q$pnSN@;#XsTM#^teCw)iG?9A94Ya>ak%c<3D8 C*;29q diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.po b/evibes/locale/he_IL/LC_MESSAGES/django.po index 02d18083..7d27509b 100644 --- a/evibes/locale/he_IL/LC_MESSAGES/django.po +++ b/evibes/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -193,54 +193,62 @@ msgstr "" "- ניתן לאחזר את השפות הזמינות מנקודת הקצה `/app/languages/`. - כל התוכן המוצג למשתמש תומך במספר שפות באופן מובנה. ## פורמטים של תגובה ה-API תומך במספר פורמטים של תגובה: - **JSON** (ברירת מחדל, בפורמט camelCase) - **XML** (הוסף `?format=xml` או הגדר `Accept: application/xml`)\n" "- **YAML** (הוסף `?format=yaml` או הגדר `Accept: application/x-yaml`) ## תקינות וניטור - בדיקות תקינות: `/health/` - מדדי Prometheus (מוגנים באמצעות אימות בסיסי): `/prometheus/` ## גרסה גרסת ה-API הנוכחית: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "תפריט" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "לוח מחוונים" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "בריאות" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "תצורה" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "משתמשים" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "קבוצות" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "מוצרים" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "קטגוריות" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "מותגים" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "פוסטים בבלוג" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "משימות תקופתיות" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "לוח משימות" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "תמיכה" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "קישורים מהירים" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "משתמשים" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "קבוצות" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "הזמנות" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "מוצרים" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "קטגוריות" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "מותגים" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "פוסטים בבלוג" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index 94d6de17..f2c03a59 100644 --- a/evibes/locale/hi_IN/LC_MESSAGES/django.po +++ b/evibes/locale/hi_IN/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -199,54 +199,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index 70d0f492..413ef38b 100644 --- a/evibes/locale/hr_HR/LC_MESSAGES/django.po +++ b/evibes/locale/hr_HR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -199,54 +199,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.mo b/evibes/locale/id_ID/LC_MESSAGES/django.mo index b7d776ae172e040c46e71246d98c9f893c1d0c98..40b58cd9375280714be5a57f95a00264d23e2fa6 100644 GIT binary patch delta 1089 zcmX}rPe@cz6vy#1sbh{~PGM6Fyl zHP9xaR&CnYBHXwM+qB3<5D{TT6w<<=7U`z%Z@hSzJD+#opL_2)@7>vs!tvban$m|x zw9vNG?nTVn@z)yui1`w;i!rk=xPgBAI<%YRCoS(&V{OPVQVn6*QcfNph1m4fe4i(B+J3>2f4^7cRYozgs6rkmknXY%Sl%fd*|K6c3${~U3iKSY`z@^>PAhtA2s1&RHbsLOz)#6ID@L(GgM_? z`0*PIRH8B`3h)+{@kboSZOq{rD!>SJQ-FJ@_Z}ftv?7wM%_BbxIH+PPcnd42iS42$ zypQ_MVT$!vfMb8*7g7xSgB@6x4qq5TO>h*8nD^tdcO4b@D^gikZe^}XsA;3#aA#p0 zJ*!G;|GCV1IMoNKuxn|K+BC|Nx!6s*GFQ`P?WHRt3S;~+-12~HS~4|NM9ZLdhu%q7 z)-1c*Z`uoqaSr;YW$6DmRYt9k-c462Rh<^PYa2hRA4f`)vFygH*u!Y)BsEw{rhoqf Dh*?h6 diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.po b/evibes/locale/id_ID/LC_MESSAGES/django.po index d564b7da..35ce6298 100644 --- a/evibes/locale/id_ID/LC_MESSAGES/django.po +++ b/evibes/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Versi\n" "Versi API saat ini: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Dasbor" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Kesehatan" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfigurasi" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Pengguna" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grup" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produk" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategori" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Merek" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Posting blog" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Tugas Berkala" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Papan tugas" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Dukungan" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Tautan Cepat" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Pengguna" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grup" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Pesanan" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produk" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategori" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Merek" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Posting blog" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.mo b/evibes/locale/it_IT/LC_MESSAGES/django.mo index 5a304af4ef02aad0b887f46d46e0cb9f0e975ab3..21ac35000ebdceb6f546872569ee19d159f5e4e3 100644 GIT binary patch delta 1095 zcmX}rNoZ3+9LMp0+8S%DHl}rp+l#TTtrr(OSV3AZF4Tf`L9KRq#z)gc(o_(kxhRTw zk)q&1+-^OH5D-D|Afi_*2qGeih_;C2;6e1__m?+xVEUP*Z~im?nLO#dzNhplQFqfQ zZPew|OA)hn{8_^v%I8|M<1w=@*hIg5zF8c*aS`_8dc1&Z@Bz-j*BHe~4(4`G;tu**x@cA#O$m>O?KngIef>>t}E){T%MVhp6vAqQ0BPI{b&)xCRMj z&A1BF7$v@SxQV^EjEQ4dkE1vj$DG$tC%c6TbkFr4x&Bj3G5!i?;}17q!5;d5-S|O{ zt@)!ki}-e$#!1qC2EP&UWg^`1#LCd;s8qkj?Kp*7(Bl}|&>>WYdR^Z~oiy+IV@Pbf zin^-XZvF+9Sj#49EXE3Ip?WV&bt9^uM7@a=?#5H70QXUM{uq_&cc@ff=cxb)ZO1jon!(x;WO0t-%%;8U=IJFHker* zdLFfb%NRi&R_p8i&6KsYn6DOXMsGoz(PPvmR!|j08&PnbxP{tEO;c4iP<2%*%~bYb z8>!rA^~B1yHnN1O;wgSZwaH^}@?fjKh#Fky#@bM+RQgnOk1EPWvf2tys-Lh5zt)+e z3|Z`mpB=~#`(82c70>#fe>mv(N4)Zz+IrZJ{bsptV$_)fi)A43!XrkU&BR2~Le{WyC>UAm$DX1avWt zn&3df#-K5&7>R=k2^&l}xCj#tgg<};2EM<04+|$b{oLoCd(U~!b5Gw5{&?!`#v>n$ zmZvA_uR>-;+^XS+_A_i&x@@+N&BTdDvncl9RqVyvIF4O7gO_j_>u?o$-M+c_mmA-} zn3-o=T(t7QE;is1Ca|t4SSX2_=q_raf{XjHKs;(w8;?GQWh z*pEH4HlA+dMh-9H5MIGC)J{sMiOVj2>Ebt-=Kfo}fM4AB8a^Zb?d~VorpDW`7PI)A zD(7+EW2J?7kl~Atz&TWDKjB0CiVtufl~60`t0EaxoI~xb;Nk&fZ5u^>nn^c4k4#}7 z@fxn7r-`EZ)q3OhknHc7cu z*(@sY`)R(vN?YWH5*S8hK7n~Gqh5TED&Z1N;|glWv73P@RO0tAgnE`o{JFueW{WOp zNt( zyH=%i-gFj{kNK&gYq#ec2h?vles9sQ(>W@3gYLKLzwlIjWh7dtE=E5`D|gbx>TEg| FIt6s?OzQvu diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.po b/evibes/locale/it_IT/LC_MESSAGES/django.po index b7c4c822..ea44896d 100644 --- a/evibes/locale/it_IT/LC_MESSAGES/django.po +++ b/evibes/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Versione\n" "Versione attuale dell'API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Cruscotto" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Salute" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Configurazione" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Utenti" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Gruppi" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Prodotti" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Categorie" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Marche" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Compiti periodici" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Lavagna" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Supporto" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Collegamenti rapidi" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Utenti" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Gruppi" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Ordini" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Prodotti" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Categorie" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Marche" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.mo b/evibes/locale/ja_JP/LC_MESSAGES/django.mo index 2cf57abb0b7df831530bb68ef3686b8418ce7e1e..2c6bfbffdb7e1d14b1fef4f17c25aa2a3adf95dc 100644 GIT binary patch delta 1103 zcmX}rOGs2v9LMqhI69eHjizOmbsc+Y8ZC@oxXO^;xzLIfV)Rynso-N#i-w#Q;iiRT z5EM}@qM(9-Xd6Ve>H#f+VyK2JB&0>OXf}O+_Z~XTxu5fx^SJ+W?v2huXF69^eAP&; zYV|Kg9;xU*H1#;rf4JH}$`+{RpqE z{$p6e`gW2+A7MX*QD%N#6-M9{+hp^W!wQ_oEm&~2cwv7Zs(;AU&pW43k-Uzp@v-v_ zD&q5)uBA}Qw)Mvb)I{5m%~}Trp~oH6d+`v?p#J|2`B{O7#?>dn2sNX|w;_AAJ*a*k zHEz^-IYIo@anm(CKwjRSp+fu~b#`A}{g0~`H-?d@MUCH!8rOpZm~!o}UHeB@pT`LO z%gH)Q-M{~7JtgK3k`~on(D`e}+DtuJ=cY@ziLA@Dj@&|K-XJyc)K{TYO;&W8$=aME zp<_@)6?G*~>+21aNzD22CMpRiIiBzWpFTiH?n zZ2!oR?~RXm<7a%&?@1;7F)#Zzy1ycJcyz!Y9h*@N+1W%-qB nv)Oy!r=HAaFHSclcGl!4ALS?S<}(=;GWYYDEQM?`u`BWqW2||) delta 984 zcmZA0J4hTs9LMqhdA>FA)SNMTzE+KTB8Xh!BcPQ+iikzh9Ae?47BndgvW<<3AQ-_$ zECfLz5ZDBwDWcYeD4*kI*jD2wKSx$5Qnh@M^P)uqFy}h>T|BXh)uMwVgbH)&p+Wy>R(-Zl4a_79p+&xj+5n1 zjQhNKxguKe8q;D@wu_}0U^gB+|G4K~WAwZS)ql`Aiptys*5hmEJ5+`Ptj2Gsem~IH zhyHTIWUYwhDAhIChfVkbv#0?F$j^?sXxud_L%&huZ;?4#u^07EJBLvHUmx7{zMJD!6__hj@oBY?TfCyjxp*=H**O;0^vb@q#KI1R@imU=N++1HR;M;fBcX}t0BJ>!31vVDWy41v=aA)Ifg|U(ScKGBlPc3w%GRY zyy+~Yo^i<`^!NL}Xm3^0#8X0hr`6UFVF@ndGo>5P6PaKoaZ$c8=k*3BUVrQ##F$Ve diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.po b/evibes/locale/ja_JP/LC_MESSAGES/django.po index 84e0b870..126bfc9b 100644 --- a/evibes/locale/ja_JP/LC_MESSAGES/django.po +++ b/evibes/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -227,54 +227,62 @@ msgstr "" "## バージョン\n" "現在のAPIバージョン:現在のAPIバージョン: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "メニュー" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "ダッシュボード" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "健康" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "コンフィグ" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "ユーザー" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "グループ" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "製品紹介" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "カテゴリー" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "ブランド" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "ブログ記事" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "定期的なタスク" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "タスクボード" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "サポート" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "クイックリンク" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "ユーザー" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "グループ" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "受注状況" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "製品紹介" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "カテゴリー" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "ブランド" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "ブログ記事" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index 94d6de17..f2c03a59 100644 --- a/evibes/locale/kk_KZ/LC_MESSAGES/django.po +++ b/evibes/locale/kk_KZ/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -199,54 +199,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.mo b/evibes/locale/ko_KR/LC_MESSAGES/django.mo index 23b24e2cf1a439634eac82720bf85659a044d63d..695d489a083107e4ad79016bd21c942a271b6dce 100644 GIT binary patch delta 1089 zcmX}rOGs2v9LMqhG>>Z3oYczfb;}+;vLK3r7>IOJDdl2%P(kS2slifEhj8N{xrhi_ zNUet?W+N^df(Z&*NG_{gK}6CfoCaJ3Lbd4on>qN0GoO3znREWKV17V zZZ^x>ZyvVuhe*9y9eTJ0kDwCupax2y2D;(uxA8djVLXMisQzD3{gyF=e^C?HOHx@A z?!i`!kl(sp!+G36!!_K18LYuc=OfgYJwqkRx%#}T7jZA|-{X4x>DpH?LH&<=e~Hgl z`&A5+-)`}6lVwlgG#M8fs#|excXh@oRKg5)-~;D8>dU^MCRWB;Tt%%|h|g5L2FY#B z*n;h@-h){!NrDF@NTNE9qTWxq`a{%GKf#l@fcpPG+=WrE+OG}u{wS({95vxy)VTLi z?USg9KlWIEHRO1qhCFJIU!ewghb)SHKyAem>THzp5C&Oq_3uRWKZYqhgBmCAe2H42 zw-~@}6xDV9*5V*f`&>=4(^*hbCDh>hQtg`t?xg5&9iSYhv{Dr96x|9%6NP-06<|jz zhmM`8Ot={pp7Lvt6yYkyfvwyK-9UY%qKl&IrPWaA$|cg{d dN^`}T(_Tki>2(mmb{vd7t;ayZ7$7d*5ICebwJjN4Jbp zrsk;kLS~n6FU*Cq8!=m+Fnfhl#F>Oy5=(d-7qEzncnJTal`NwMUUPBF#Sife&mZGqeD2=&@D}k~_dLTg^*)b>uz)LM zxr~o|zSK^SQlFR^&9IF6-~!I!b!Q8;k|(H%?O+_=pfdEq#h;LG+W@C==;Cpftqe?~ z#xJ3-j#c;KGAh1-O6?L>v5o5R4)gdC)$WIT{tGp5*c(kag=$|zO}K$-zlz$zHB|e% z9{W!g%;$kpzKPoVZM=Y8RL8HV0l#4rf1(DuP5$K_R7Td3%m(S^Hs}MvK|Q7$ioT<5 zR_1j6f&p}b&r-EI6_2W!>j1GhJ3-aNRCHKNR85S`8b5{=sQ=5XyU`YCl`2|{{tiu2 z3)XqlS;*D6=uazC4;Bt+P;>^)Q%_PkD#4xt=@~?t@lGRI>24&4lO5kHc6(kr^bcCJ BP5}S_ diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.po b/evibes/locale/ko_KR/LC_MESSAGES/django.po index 786c5782..825c9451 100644 --- a/evibes/locale/ko_KR/LC_MESSAGES/django.po +++ b/evibes/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -227,54 +227,62 @@ msgstr "" "## 버전\n" "현재 API 버전입니다: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "메뉴" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "대시보드" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "건강" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "구성" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "사용자" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "그룹" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "제품" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "카테고리" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "브랜드" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "블로그 게시물" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "정기 작업" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "작업 보드" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "지원" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "빠른 링크" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "사용자" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "그룹" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "주문" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "제품" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "카테고리" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "브랜드" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "블로그 게시물" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.mo b/evibes/locale/nl_NL/LC_MESSAGES/django.mo index f9b85f013ddbbbc9423f130649bf53d8f6d308f0..0e2c68404b2c1c1981256ae5341703f1a9c12f41 100644 GIT binary patch delta 1094 zcmX}rOK1~89LMp0Z5uU-HrA@O)@HT!Z9SbW@8S3`j3} z5~@9m9>j|vfg&D@=s}QpQ;^^TiWUzFp0tSHUo!MhCZBoi?(F<$=U(D_qEK$EyKh7% zrIj*KW7ds77V$@Xsx>i&Mi*0Sy7fPZsbP1z4LiP8fUMz*`A4l!wE!=@qsI8bmZCMG2@dK(q z!G6eI)cqHcM4J|^=j;1hh|SbCx|Sx)dL=u0kS5oPH&J#{+9`@{6rBo% zGQoVdouX_g6I!*lO533DG{07^sIO94u}*|epwg@8q;yb}c7=|dLg{R&)T&>%jYkA_Z;UhzkR$(GojaNk&ZFyr;4bD83a i*tLde!VmI(Hk;0+{M_VB{9q(U%lGKW1jYGybIpI2DsGSf delta 984 zcmZA0J1k^T9LMp$^?vLc!&uAUdOs$*34&xoA)&C@h)R@1frcnd+vOseX|;#uHix_ z7T_=z<9Adhlc<5GUA*YxRczq;Cg$UzyMKZc#J}D32x;nmE#_hiPEq9;-utAq9ya4= zbG4bwediALaQy(g@c}iV>bgutnz4j9=Hgz|{RAq35v;-q)N>2?6_ZHvmO@`M+v7x~ zJ#e04AMrUR@D-V?4N$i>97C0M87nY}N?;55*&YXyw@c(zyFpFtAL@VJTwLI>{+dbH z%iL&0tyLFlLk^-!KaX0PB+lX*>iS>j3u@p()`Q9h<<`>Z88vNGO;k;l(O9a8_FwQ~ zJEu)_DjYPAqb8y(nQTxtZAvw5)(*NhrLyD0uon7zYjh{7fHs_(s-~|)RZu0h-?SH^ v103|FDcg@tl~L=Yx6-wiDsweGXz4%MGbO3fP&~a6S}IKyd;RHguQKaD_2o?& diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.po b/evibes/locale/nl_NL/LC_MESSAGES/django.po index 77bd412e..2f0f4e83 100644 --- a/evibes/locale/nl_NL/LC_MESSAGES/django.po +++ b/evibes/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Versie\n" "Huidige API versie: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Gezondheid" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Gebruikers" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Groepen" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Producten" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Categorieën" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Merken" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Periodieke taken" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Taakbord" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Ondersteuning" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Snelle links" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Gebruikers" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Groepen" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Bestellingen" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Producten" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Categorieën" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Merken" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.mo b/evibes/locale/no_NO/LC_MESSAGES/django.mo index 372a13958221d6cbd85f1399d42290597679e423..feae483b4792cf9effd645e5e2ff71ee51104ae9 100644 GIT binary patch delta 1095 zcmX}rOK1~89LMp$ri~g?6XUC<)vRr`zUrYU2$F-Xh^VC&sn!=r(lsuL3FL9`VnM`% z*HBR}zAhf53cU!P6j6^A1ci!Nyp-y}gC`&0_m>R*$?RumW_M@iKa=P6g(4^i)bLcO)6&~+Tf4mwWZQmo-}yyCopTG>t1K=)jI%GICYCfZ-)5}bGaKX8=#FV}vI zWvhP-TN&TZb90WgU%(eE@l~QZ`Eu74xV}|4EU5rL^5^zSxCi$@)?4gQypWT>Ug^fN|7etD+`+8};0M%;FSk z;Mu!J-@K*I{m_C_Ig?nJbiPg;uD4g#LlO6h$9JE9QtaLgzrCY-tM>I^Ei5 zMW{*Rstj1Fo_`|9_!Vz@CUhhk9xjjjqfNEqO{o@ zvu?};I1oocv+*LcZ}^gaq|_{oEm(zJn8XomzwY>9(PzKN>r0jiSUk)qfy z*T0Fg{>tdiT?izy1BOtWDT;;lPTrrL0dW||UG6\n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Versjon\n" "Gjeldende API-versjon: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Meny" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Dashbord" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Helse" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfigurer" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Brukere" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grupper" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produkter" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategorier" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Merkevarer" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogginnlegg" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Periodiske oppgaver" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Oppgavetavle" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Støtte" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Hurtigkoblinger" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Brukere" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grupper" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Bestillinger" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produkter" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategorier" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Merkevarer" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogginnlegg" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.mo b/evibes/locale/pl_PL/LC_MESSAGES/django.mo index 478e4c75fedaf0657b5d1ebe03a6388ea4e636d0..84e7e1b7b8b510851dfcdf744eb466d3c1ba9576 100644 GIT binary patch delta 1095 zcmX}rOGs2v9LMqh_?U9CoGg2&*)7vvI=JZJMu^5*R8|t2QG(8N%gf|U_#kxAP!vI{ zz;xY%Xj3klO@u*^)wWzjL`2~xET~1R-1Pm;9Q@;%&pqdO?m6dw&smJmwP(LpmP{Ja zOsS>Z2${9vuOfbkZ^dS3BWB-m4fVEFW>M_Kb(p{%IELHs0hZxA4C4o6xP5Z7%ZsPSJ=;})<47f}mWBU9O0 z+>G@YW`2vijw4t@#~ECXqqqXEI&Y(PHieq#o~uv0`g7bu`&(RwKV1JG?4th9wV!0$ z>hHl)=C?i`dP(~QoMFb)kxwYoxzr%)?@iZPtQ7W|1?P%Yaj#YR-U3CnRG@+ylX zueNSvhz+>@TbNx>!(ASC9d7;C)31PSENGW;mjcTgFdL^f;p zQ44*BYM)27|3+<)bY=6Yt|D)ICaXj3Am(gE4Ls=T$59LJL4Etns896>m7!_u!$Vm)wjY&|Ll{E6L-XkTEkz?w^yfndMrT2j>o6)in<&bL4&iQ!cHBT|qSR9qJ1M#q z3hj_}*e;4b1If#$Ux!(XQ+S$RD^n=-3S~k!qKLAcqG+b*dg-$$bmbIEXLbImkO5s` z1-Er6lp%|p_AezfgT6PC@kR!G&+iTr{;-#OUwpJYd}8RlKQug19o-x091W5w?^uvd rWz=!1vxi9hdSt@=&T4%3R(RAuE)hg&i$Ony(j*i0e%FMG<8jaj= zjpg`^AuOnT{i6tKp*U)xgzFDsf_@SQa256ZZ&ZLMn1|=6z%P-d?H)g1*6({}VeSqy z(2GTw#8R9@Ws*WIyx{s@UH?0_GX4__@t2!Fz-ju&ZahSqns3H@?8G^CIfh3b|FltU zR?9@P<#kI_s7RNv57)3C_fY}eq87Sy{YNaLpGB6kBGO}R3nN1oN6n98J$^wYw1}P- z@@VLRbyTF=IE*`(#2eHCT~RZBmf)hToks1{ERw9HQGqVI{w^x9L)6Zmp%S=o-bQ)< zTHwwNJfR{Cu&;Wzji?7FP&+b%^O(j4{D;cq1{L4~22e@R^yk1os0u_y|ED!|zs{e3 zsJdykQ=2tLiBffFlqJdgLFrJc=&<%sbttvHd>GbAeJgFQp&e1sDqU249m?K+HK?7B weCDDrEk=D`IG}#%<@%ATjP-t-sD8;@<)+Iv$AXE>k6\n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Wersja\n" "Aktualna wersja API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Pulpit nawigacyjny" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Zdrowie" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfiguracja" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Użytkownicy" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grupy" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produkty" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategorie" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Marki" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposts" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Zadania okresowe" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Tablica zadań" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Wsparcie" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Szybkie łącza" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Użytkownicy" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grupy" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Zamówienia" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produkty" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategorie" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Marki" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposts" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.mo b/evibes/locale/pt_BR/LC_MESSAGES/django.mo index 7e2e2572b7577837304e8ec60b17010b1dbcf1ed..1d5847f59d6b497f846250cec08e639864f4de5c 100644 GIT binary patch delta 1090 zcmX}rOGs2v9LMqh=s4CmIg?qYz3yaI_OOjYn*kvs$|5D~K?O3-%`TP`GtMH2X43=Q zv>0*~(F1}uZf4^)CX6;w5MdBe6cG~CqKyU7_cwF!4`)92oHO@4{^#7c15XYXKemML z8nKtMk#Zwsmck!({1Bh&&CW*6KI0ndsb;eT4&ypZ<4(Ma+wc*t#1|OBH^}R@;Obvo z|01q7E81@!+WA8yZng?NT#G%Zi3U&uji3fP=j!9wOMMde<73qOA5iZtVi^CT7OqC7 zvR2%Jofu($JK#Ew;08L*;0i2Y6JB>tqjolfn&^S6&${{?CTX9?M*Qyjf8hxAKdya< zZL9w@HZZ@9@^GHCU%+t8?0JhBi?)}WYngbDt<-Fpq5p=OY6JiP delta 984 zcmZA0%S#(k6vy!s6RoY$j5wLsKn2asqH^L$6FWs zW)0lkz(6OK;|NyZ7-}Us)Wp+4{4t0ZF~#^QKER*B^(~wvJ_yF+EK}DTu@qbI9aT9B^w^|$Nt0Fz9iVUDuHj28Q!&-cg+LEPU{0H*0 zeGZzxfW9WWz+zFd#pm_I?37@e`_adq}nH7^mxMS)bz1-&{Zj|jz5N5HMm9&uCe`YTNJd> zwG~QI3(@zcZz0jgp@g2M-)}0FnkvysucK>!pV3{*Uxa6(>sc?8U-5o>>l3NI{6?xg FbO-q6PEr5> diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.po b/evibes/locale/pt_BR/LC_MESSAGES/django.po index d926a207..ba3d8342 100644 --- a/evibes/locale/pt_BR/LC_MESSAGES/django.po +++ b/evibes/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Versão\n" "Versão atual da API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Painel de controle" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Saúde" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Configuração" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Usuários" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grupos" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produtos" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Categorias" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Marcas" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Postagens em blogs" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Tarefas periódicas" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Quadro de tarefas" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Suporte" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Links rápidos" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Usuários" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grupos" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Pedidos" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produtos" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Categorias" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Marcas" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Postagens em blogs" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.mo b/evibes/locale/ro_RO/LC_MESSAGES/django.mo index f7d93126a99d62e05c69ca80981619eb416676f9..ac629c22aa7ec1cdfea4886229af79f3efd99632 100644 GIT binary patch delta 1090 zcmX}rOGs2v9LMqh_!w;(b<&=edT%~@T116zq@Z+>g}QJmGAQ+y7i*LmXVIo1h!znP zSgl$_Zh|0!S=6FM3(+<~Mhh2FMg%1VEn3;8?{DVdAC8}U&hfndbIy(K58b)XwPg>C zXs2wW+>DrY;ja?@5KE}9- z<2tjP{pDi|{}8P)t3nSq;6Bts$59gvq9z)0^~-pOdI~#n1~vW@YTPoG;Xl;I)yPt| z9-FWkqpWYoT*nFAO2=8O#4N7G>(1M#lRZQ&^w`y(yZS5iX`jOi{Neil;2`xC*WS;u z)qe)dS>G=3ah|ka!g$+8e{rBK0zExd>l+@S`doucQZ^eOb@6iRb_;j4IJJz)i}bv1OE zEp|G%GBR;B@TMlbsjAU{EEg?SK}oncj{f@NAwabJcuMFHfmvtplDJ^2r0C&5mbbPumrJC zyGX>&!ZZp2$tfrnf?%qv)WSv^(aJJKKm`BK-q<+Y>~CjwcJ_T|=Jvb3cljq3c|VPk zq{gV@A+uMQ$>BoT%rzUlYqo{=Xh%xTJZ!@I_!6IDFV^7~EW#x$z!l_mTXXGg_k0)2 z&3wyn^N;~2Sc3mCf(2#S55-UuJx5KHa_tUG(eB1J{EB*i9Tng%=HUS<@FQeuyTDq! z4BEa~l+jT-nz0bOu^8W>G8sfoJmlJAuKf)Y^v~fP{Oz7^-~jC%*B>EGJ+H=mtjCY6 zauUOS*leaE8{tBYStSEjQ4#Op3p~JQSWMUotPQmyou~lcy8Z!FhM!UMjH2F~Mm}MG zke}^wd4Ol=E3zwYw6yv0tR8Afqxc&8kznlyD&t?MO#Y(IKn6+HPEjBDhZu6MHHk; zBUS$nZI=?!dD9BU+PUOVlhoUV0~(ZOt_{>Gs`l{_H7M!h+~M$ikC#f%dVAjd`^1~{ Ia-t=44R)wbQvd(} diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index 5147fbb4..e41747e7 100644 --- a/evibes/locale/ro_RO/LC_MESSAGES/django.po +++ b/evibes/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Versiune\n" "Versiunea curentă a API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Meniu" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Tablou de bord" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Sănătate" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Configurare" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Utilizatori" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grupuri" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produse" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Categorii" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Mărci" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogposturi" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Sarcini periodice" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Tablou de sarcini" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Sprijin" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Linkuri rapide" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Utilizatori" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grupuri" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Ordine" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produse" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Categorii" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Mărci" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogposturi" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.mo b/evibes/locale/ru_RU/LC_MESSAGES/django.mo index f415534c4f0fd0a908fdaa9c71b4818ab2973bf3..5758d9dcbfcc4da23f1dedd4c74dc44be9057a45 100644 GIT binary patch delta 1108 zcmX}rOGs2v9LMp$sbh|2lUb>~Ze@?L2Q3nUFpz>ED|KNO6`13#2Fn2-3pYNhRYQxg z7qn=oO+iE;kuPXdwrDdKLR>@?ZA^+ z{sOKr8?xVYs(2u>+-wJgz zpRx+vh+8ni_wA6oaTM2b<1{YCek{R3=MB`#?xH@FapUK1JdT^VK7&O#@9zJ?R>ptb z^=6i>`=_vw?^`>abCmr8PL!LyAykpUtz?P!QHf1sBhFzn)@;jFq#sKe4 zyFP(oVz`&<^Qg*IZKwXVbWYIG0|Tgu9w52c6C`Py#1y{AYj}VS*Liu3NAL%#Vs-J{ zJO@!FZ%57Fhnn{xGKD?EUHBnR{dFUcr?kQ{)S;?HmAChHsEd4if2*t ze8Z>s2dgo&Gv^elBC|-LZ4FUO==?1S~kG+l0+ zrj-{8cpLv=1j}oS6Gc%2^`Zt!`SviTXpiD!e24me54FG}EX7}_h5tr|wllno7p@(c zwexm69SN+!QLMt}sGVd`1JC;QTi__wg0&@4i36Huby%%P@vhL^+B1 zpx*2wRS|d=Gkbtjs0FRy1a9FZo}wZ!@X)LpN03kLCAQ$K?_Wl@Fzlm0i;7eM6WGvQ zeEtLj4fL8D7GrbBqAkFA{DP~f1MY=29K&5yq|Q+jh2q5!$50dWBcIv~KEltadGe^7 z`H70?Nu2Z7#D9FpB`S%k809JUp?0`{8sGzN<5z6MA+lDcQ4v@`BJ0Afg=rEMP1@-0 zibt!(Ydqzj3n?3Mq3>{=W}T>{Q35GhnyE@k6&)4pbV+#!`7w->xi0tpog%4(Q&BXu zu}Z2otm7@CMu)iQPh;W#6%y1HHftQ6+o7VN9lMe{3B9S_7!Rj%pTbS88`=1DE}8gI Fas{!FQEC7H diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.po b/evibes/locale/ru_RU/LC_MESSAGES/django.po index 75d99626..72be4d00 100644 --- a/evibes/locale/ru_RU/LC_MESSAGES/django.po +++ b/evibes/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Версия\n" "Текущая версия API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Меню" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Панель" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Здоровье" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Конфигурация" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Пользователи" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Группы" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Товары" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Категории" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Бренды" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Посты" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Периодические задачи" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Канбан" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Поддержка" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Быстрые ссылки" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Пользователи" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Группы" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Заказы" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Товары" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Категории" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Бренды" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Посты" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.mo b/evibes/locale/sv_SE/LC_MESSAGES/django.mo index 2fe48c715cab851abe4419f85c260958367644d1..d8a6c3dbef55254a996de280f4f9f857da122e82 100644 GIT binary patch delta 1094 zcmX}rPi)I!9LMqRtm~+5s~Kb1e$1cwQzsG!%aY>4geHc?$lCeYn%1vL+Z}e%M8v_h znWHRJ;>2MWOWd|_aUc#HM2JYFL1)m#A2fSu01qu zM4YyncB8?pAHS~Pi+JB?b|GT+0oT&+Z#9cy64zrI`)~@k<6T^Z&oGQHk=N~w>wk35 zYq-X&Y`?hJ$PdD8W-aL9I^2(%=qPHSA=E%4u0M_k=m&TR@1fp*i+ZnyA*`bouA59{ z9oU1t7-oJu;vO8wO*|OJl{ks3@tX4%Dzn?DiDq2?q3b`!t=xZ#&G^|p|BgfS|G4|7 zNn6j)V-xe+C>Iwg`xRUy#f5e=KDMxBY2~j`{V%v1|6(upb(=+T5LKaJRE0)eKZ_)9 z1yo|!kyq^wYU`e0xr>WeT&U#VP%8^j9}N^m4cv(X*p0{V5_Vt}_u?F?)Sr+ft%l@c zb>w3$-csq~sP_(|7LxR+ze<|thBBE#?a@ut0;XMm2KBo~s7lP?PJE6{_!G4yzwrz< zvk%(35$6PIyb?BGCr#t&|F;|(aGUGt52KQ45LHHlYsIRL22$3_cn57CP1~W+_NcT9 zWy*ZEho(iV5)}A}V)BsrNG%X)*EAUk_9 lcE7DP;TKEu)m$#f1mmefVCkUPso>IfacEs!b#W3L?Duzby7Z8f&pr2Xa{j+_^Emo`)W53A+cR1(Jw{*6 zF&o5-T)t>0A+z}svoBc9I9g#A#%`>|0qnvT*p9EU7!R=kKOm1=+Ks=u>*p9T^X-Cz z25z{*a=gbV7F1?`D2AHoDQcpm8;@X;@i;!mH>l^2Q42iBJp6@P_$4y6-C#351Y_T< zk-Hl?(St=ej-@z_s$?ED@hdl8apQGt;ruQZ;wN|gGtM$Tb?2j$sq1mf#{@2raxXsm zl(b!C#>ckf*_9rk#%b)vZ`g*nScZ|NY$8plL=tY?hZJS~sDdVtN9-kPt2Xfo?xPaU zps$sE=RgzvKt=rJ3)JTCJK#*Gr=+DZ=XLicC!}tF}c+5s-!G3Hra*>JF5Qic{;Px6@Um zlG665u-Fh^`ll(@|C{zwt%t5O>gh^Hdl\n" "Language-Team: LANGUAGE \n" @@ -229,54 +229,62 @@ msgstr "" "## Version\n" "Aktuell API-version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Meny" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Instrumentpanel" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Hälsa" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfig" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Användare" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Grupper" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Produkter" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategorier" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Brands" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blogginlägg" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Periodiska uppgifter" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Uppgiftstavla" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Stöd" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Snabblänkar" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Användare" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Grupper" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Beställningar" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Produkter" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategorier" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Brands" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blogginlägg" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.mo b/evibes/locale/th_TH/LC_MESSAGES/django.mo index bad5ee603e933ded37383aead11ee28e339302d7..7399a0f22d86a1192602ea124caa04e107365f4d 100644 GIT binary patch delta 1117 zcmX}rOGs5g9LMp$uUnet)vWCH@RYr*d}To!Yf(XDWp`m36@+?9(X_5gv`GY|h-{G+ zv?>Y-gbKMuN7@ub5^an&Eu@aPDQOYW$_V=Y&OJDA?q~ip_sq=s&&==EX}AAtVdh<< zl=H0N8B8;)#h>Z?Q2Y$DQ#occxQw`VsaX``xB{DTD_+5k_z1Ic5+nEtdELH*@od;X zhXrQ+_J_(U{t(GG%R>j3V+CrW1E_%-Py?L~dWq-CVCjg&%)Tl^|ZgoMfg4J|Ah_2^I`jO zK3n}wn8o~dmdY8@eh%NPG<#QQRzv&HHnU2cz$*NKjTqZ*)`+m*e0pnPPpHbudLoG1M*BrvKD)O(CCuoqjP={~~i*ORx;&d3#V<~ZdHQR(WsELMA z??1;G{D^t@bZ5%fs0Dn$G$hHvR_gpMl+DyOgpm%62GsuRFlsO@MEj;gNXCQ1wF${) zuqX(=R<}Y$AE3ptYr*6tsO;!4D+?-)=2z-evQh+Fpc|nZsC`l)^TG8h2%^-LQ#Hz? zty0nHR`yi5tqVnm*>W1)&X(>AuG8D?^tQQ8;{K`hnadM{AvB}g-ZFH>3q#}bzWERFOWC)Q6(uK6@YhmTAQF{duf0 z%h(1tbv&?(Rd|3QEUPYjD1sU&h8ig0;(kmJ4`3g@K)wGFHNiZV;3jI~Kainq52JYK z#Tl~(o^GI_1Iuv$EATFAB_pVT$6Wlx#jmi5_8B~e?_B>U9420K?ID(_{zfdtRvcxQ zJ8?a8%ItN}>@pq64zq5Y!Z^OiH2%g%c$G8K2bYjn>?@weZP&i<;@XR5L$t>*g)gxU zzvE5(i`uy>G4`KbunBJJaS}D~JkH_@E@E$2VS-!OPwZ!wm6*gcm_|+PIkw{hYGQdD z#Gj}gZedl*v0GS+qjAo^k(Ys3=kOL6r)sj#&#({&`8I4AzG=8I`kCC5;j&O68Qiqy#TnwMr$WR?m-Nt<CHJd%yfT{%By!V% SXVGjhK9!w|g>(6MebGNCPFBAF diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.po b/evibes/locale/th_TH/LC_MESSAGES/django.po index 4d63b8cf..1263f64c 100644 --- a/evibes/locale/th_TH/LC_MESSAGES/django.po +++ b/evibes/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -194,54 +194,62 @@ msgstr "" "- ภาษาที่มีให้บริการสามารถดึงข้อมูลได้จากจุดสิ้นสุด `/app/languages/` - เนื้อหาที่แสดงต่อผู้ใช้ทั้งหมดรองรับหลายภาษาโดยอัตโนมัติ ## รูปแบบการตอบกลับ API รองรับรูปแบบการตอบกลับหลายรูปแบบ: - **JSON** (ค่าเริ่มต้น, รูปแบบ camelCase) - **XML** (เพิ่ม `?format=xml` หรือตั้งค่า `Accept: application/xml`)\n" "- **YAML** (เพิ่ม `?format=yaml` หรือตั้งค่า `Accept: application/x-yaml`) ## สุขภาพและการตรวจสอบ - การตรวจสอบสุขภาพ: `/health/` - เมตริก Prometheus (ป้องกันด้วย basic-auth): `/prometheus/` ## เวอร์ชัน เวอร์ชัน API ปัจจุบัน: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "เมนู" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "แดชบอร์ด" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "สุขภาพ" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "การกำหนดค่า" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "ผู้ใช้" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "กลุ่ม" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "ผลิตภัณฑ์" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "หมวดหมู่" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "แบรนด์" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "บทความบล็อก" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "งานประจำ" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "กระดานงาน" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "การสนับสนุน" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "ลิงก์ด่วน" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "ผู้ใช้" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "กลุ่ม" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "คำสั่ง" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "ผลิตภัณฑ์" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "หมวดหมู่" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "แบรนด์" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "บทความบล็อก" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.mo b/evibes/locale/tr_TR/LC_MESSAGES/django.mo index 43f2d03c041fd7a03fe67a791e74f61c06a06299..db70dae6d8cc159df78e20882bdc52cc01403be2 100644 GIT binary patch delta 1102 zcmX}rOGs2v9LMqh_?T)mn{;|E(j(ef;I+YZ33%RizuayNQ;UfNQl0_nS*~g^Ev0_W(F7V8+d)tH5`8&_j5ZpT}=1s~%we2YQ+fIM!W-1wWj zKaVTTa`v0fI{pw`VYVDST!nj43$>#rilHXD=*HJ^KjRc0!Y8QbKck+T#|m6PC9aDs zWf9zjjTmHoJLYb5U;{ULa48O972bBS{vR}imtXQZmm3Dk%Df3szvo?)7rWt1q+hB9nib}W>m2eET(>OAv z4WKr52lf0zjNm)Wsr0jS*5CpvvpTO->IT%rO?U+NVHc)R6Hg+!*hj3ypQwfZpcV*H zj?LJBO6)M|C^}FHU5-+Jm2{X3I`a|KP9M1OQ&g#6<64|{*XQs6ARwXWX3#b~0({bDFfWvHx`m?qyqQ+4zb?xN}C+Dh9^YosZ5(DYR( zQ~~m{oit9g_|mCbN?4mwcv`=@*e#V%U7e|prHrkoPp@5@hC2Ty0N`kBGe`fziodnnP@?{y|p x{S&9cFTz!45(Du}VrneuXGY7SEs+z2{BW|6_m0L3W65|bTgWHl6D`q$f&YF}a^(O3 delta 984 zcmZA0J1k^T9LMqh7>`|R8INHx9^=hKwL`=b%_31O3WbQuBhjKFo2yZv61&+%BU_Lt zB$7dhO^B96p_yjU+if;mNHo5`J4fRr|M}c=&b{aS&;Q=J?)~@KyDdonZnPK?A?5>S zpYSS;AKG!yY%JUC1PkehbIn57jK$cAO*o8oxPWhQ3o~&SdEEA0|J2Q2V7{4WS6q~G z!!5qYM+{?TUTUKVYN1xtLUGsc!8rXs?7&6T^9QH|FEAZ%P>CmzrR@(^;gjF@%*wgD zoPid6gMIi82T>;(LoGbz`g5-T6{C!=VHWPW`9mC`f9A%+98>cZn1S^;PL*SL=dsgD zL8_E9m8ndZkZ0{1w&J$)21(iiq_0HtQHhqJPS${|X>F(j^`oAjz#?2nReA?Y@Ekp5 zmgGXEy+AJ1;$PSAXE%+Hpc0wD0P0ZO;?IHqp(;T&RZNG> zQHTBglQ(f$OH^o#R!!&x`hX~cUoK^=rV=(2N=((@k74!1OH&2ZbW$ay)=22zp(^MV zsVb^qq>G<4B1XJ!de>?#L<6A;@u^rD;kU%^;B?N$Kq#JA4IP9w2BMvb&1hTT8QZ~6 AaR2}S diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.po b/evibes/locale/tr_TR/LC_MESSAGES/django.po index dfe41e3d..19b70307 100644 --- a/evibes/locale/tr_TR/LC_MESSAGES/django.po +++ b/evibes/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -230,54 +230,62 @@ msgstr "" "## Sürüm\n" "Geçerli API sürümü: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Menü" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Gösterge Tablosu" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Sağlık" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Konfigürasyon" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Kullanıcılar" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Gruplar" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Ürünler" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Kategoriler" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Markalar" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Blog Yazıları" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Periyodik Görevler" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Görev Panosu" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Destek" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Hızlı Bağlantılar" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Kullanıcılar" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Gruplar" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Siparişler" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Ürünler" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Kategoriler" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Markalar" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Blog Yazıları" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.mo b/evibes/locale/vi_VN/LC_MESSAGES/django.mo index 36701e6b338135604aa21e6963940d5492b3b2b3..9636c3caacb3745df3766d7564486c48aa89ef85 100644 GIT binary patch delta 1099 zcmX}rPe@cz6vy$Sj+2d(%}m-KvwS)BKO>?d2sagkWq(|l**{8~W`?OJ=(w;&5=2Fd z2qae#R*S$zMYf0#q7;KxDFjgw4Q)aSf?Cz4@9)i}!`%72`|i8%o_pSV*IEiKgP#+j zTShd|>S&is%$o6gDSyP5GP7e5vjQ%l-&|!D!!}%qUAP7Zuo3U!TzrjToJOYGd)NQ! z#%D2ZHfX;&Si%M2`DXLb!y4R(T4*=wM(wB@9e4dSZlUkvcD#?8{|Pm37DMeNC0=x1N9}AFwa|#`KXml zRdR(kLcweujVBtsbjvYJ(j1-D!oFP>x(F*sl19N8p#J$QeU5(LS?QEj*2_f zC#)zd68!6Bwn#_nTzAj;l$Y=E@|l#EI-KoF^?74&%l1XX2Yb(?di#cIV_PF_{n_rE y*P8WnWBX%Q5|xuTr|$Y*W@5xo56v_jh__}ZMtv_=c>W^q`I*yxW~@G$E%^s{l5yGq delta 984 zcmZ9~Pe@cz6vy#1&SZZaZ5*3YXSB(ercOb~1fqfIE*X10kn^b=KPF>J$|*oCb)ig)ofUd1&m$1lk5w(j~{?tKZX z&3xPCrj8E|u@e7c0?V(TO_V|n^Z+$b*7bWaOMd`6@eS(#Z>R)I7{NVM;`_+Zc7nI@ zU(ol>l6;-yK|5Z-0j$6g)Jk%wfhS#m#`WLg9iA`aW&G;if5#{Ef4JufmZ|p*cnO>fTweK(7$%sjGK`+yzz3HALRdU%TZ zzJ`t#m_{w&k;nckvwj|E1!Jg6JjZUFLnT&3?cp}g<8RaePdRaN8nw51457+R&Ovez zR7Df3X&!B}64Ln#CeR6HOl#0HTAI*=5rXR5EkcJ8U8GQ`EEm8rE8+DBD}qhj?$&\n" "Language-Team: LANGUAGE \n" @@ -196,54 +196,62 @@ msgstr "" "- Các ngôn ngữ có sẵn có thể được lấy từ điểm cuối `/app/languages/`. - Tất cả nội dung hiển thị cho người dùng đều hỗ trợ nhiều ngôn ngữ ngay từ đầu. ## Định dạng phản hồi API hỗ trợ nhiều định dạng phản hồi: - **JSON** (mặc định, định dạng camelCase) - **XML** (thêm `?format=xml` hoặc đặt `Accept: application/xml`)\n" "- **YAML** (thêm `?format=yaml` hoặc đặt `Accept: application/x-yaml`) ## Sức khỏe & Giám sát - Kiểm tra sức khỏe: `/health/` - Chỉ số Prometheus (bảo vệ bằng basic-auth): `/prometheus/` ## Phiên bản Phiên bản API hiện tại: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "Thực đơn" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "Bảng điều khiển" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "Sức khỏe" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "Cấu hình" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "Người dùng" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "Nhóm" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "Sản phẩm" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "Các danh mục" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "Thương hiệu" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "Bài viết trên blog" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "Các tác vụ định kỳ" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "Bảng nhiệm vụ" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "Hỗ trợ" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "Liên kết nhanh" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "Người dùng" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "Nhóm" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "Đơn hàng" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "Sản phẩm" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "Các danh mục" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "Thương hiệu" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "Bài viết trên blog" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.mo b/evibes/locale/zh_Hans/LC_MESSAGES/django.mo index 14ab8d9a814cd819c79e9c5bea4a5e1e00da2b95..41a136ab52f10dfebd4937d24b4a4279f746f2a7 100644 GIT binary patch delta 1088 zcmX}rOGs2v9LMp0sZ-s?noN6GGu^U>*_#Sl=qZd1j6HeLfG;RGHaX&+H>Er`)*2EP)wZf$dn21Go`GT!hashOdz3_QsVzyZRz7 zGaIzuysYMj*iy4f^sxqaq6RvI>Zldf(K%PXg!?FW;Q_plYX2V9u88IM4>fUpWGJh~ zby$Zn#ARKgRWZpTq??BEDh<@aex#^BgK-={P4K2Obl)dX5qj=??R<-x@D!?j5$W1y zonDgoGo~eZ(GR;&9Ua7KY;xr+>U^}}UK~dK{}i=VFHr5ixbNRk{r*9P+G7=}Z$P!% zgPKS>Mf_EfaTQryMLEDI^v)sYC~6Nw+>MV=?LVPbTEJ%fg*q!~Mwf?C|D8YrZ7a$8 zU*~TwZRTx*E9t-})S84=sQqR!(Y~p}ZDbv;P2}z5Iu+fds4cy|sDg3%#3agT?oDyfsYNNMOWZ2p$aa-q-4zqcuf-4=} zR|CJV+wZ#^_`%6sd(i8Tzbrcvj~(y15cKrsYZLpuOnKs3o2rFYVW8w7h aNd8B%K0f{AVd47SLVn`wod@}v)a-vBWN*0u delta 983 zcmZA0xl0^j7{~F)GsbwVnl&D~tMQ1(B2lu1L|HonrVte?3qdgc0kKkK3PFfk1cneu zk)%ip3sKNOLJ|aP!NNumEvy4JB4RB3{>I0~7oPddd(3;!QFb*OoK)t2FjAUG5VJXE zeYls)gY+}cY@*og7gmvvmzl+|1FP{Rw&Mu4;2b{0FIb3c$mh1{`QKi@ixp;p?eS7e zgA**pON?V-`RzanR7YK?jxwGfzzq38?8SN1_uHrm?qWV3peBBZbZ!5z0slw&z^tCu z^%Qhs5f0)b97e5V0@d-f=ihpM0iRO7f)8-r>wn-l`5iBhvrN?|u>f0fl3h;YyMPf^ zDsKmhv;Qd?G++s4Q4@RZ&UpDEYDeC?AKlNW34cd@zkzgZf82d!Ogr`Za}3l`PSWf# z7NPPhVcHCMao(Gfa4449T8@1!4SP~;;dJWa27lyCq5uE@ diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.po b/evibes/locale/zh_Hans/LC_MESSAGES/django.po index 41331168..26a4b480 100644 --- a/evibes/locale/zh_Hans/LC_MESSAGES/django.po +++ b/evibes/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 17:05+0300\n" +"POT-Creation-Date: 2025-11-16 15:38+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -227,54 +227,62 @@ msgstr "" "## 版本\n" "当前 API 版本:{EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:62 +#: evibes/settings/unfold.py:53 msgid "Menu" msgstr "菜单" -#: evibes/settings/unfold.py:67 +#: evibes/settings/unfold.py:58 msgid "Dashboard" msgstr "仪表板" -#: evibes/settings/unfold.py:72 +#: evibes/settings/unfold.py:63 msgid "Health" msgstr "健康" -#: evibes/settings/unfold.py:77 +#: evibes/settings/unfold.py:68 msgid "Config" msgstr "配置" -#: evibes/settings/unfold.py:82 -msgid "Users" -msgstr "用户" - -#: evibes/settings/unfold.py:87 -msgid "Groups" -msgstr "组别" - -#: evibes/settings/unfold.py:92 -msgid "Products" -msgstr "产品" - -#: evibes/settings/unfold.py:97 -msgid "Categories" -msgstr "类别" - -#: evibes/settings/unfold.py:102 -msgid "Brands" -msgstr "品牌" - -#: evibes/settings/unfold.py:107 -msgid "Blogposts" -msgstr "博客文章" - -#: evibes/settings/unfold.py:112 +#: evibes/settings/unfold.py:73 msgid "Periodic Tasks" msgstr "定期任务" -#: evibes/settings/unfold.py:137 +#: evibes/settings/unfold.py:98 msgid "Taskboard" msgstr "任务板" -#: evibes/settings/unfold.py:142 +#: evibes/settings/unfold.py:103 msgid "Support" msgstr "支持" + +#: evibes/settings/unfold.py:110 +msgid "Quick Links" +msgstr "快速链接" + +#: evibes/settings/unfold.py:115 +msgid "Users" +msgstr "用户" + +#: evibes/settings/unfold.py:120 +msgid "Groups" +msgstr "组别" + +#: evibes/settings/unfold.py:125 +msgid "Orders" +msgstr "订单" + +#: evibes/settings/unfold.py:130 +msgid "Products" +msgstr "产品" + +#: evibes/settings/unfold.py:135 +msgid "Categories" +msgstr "类别" + +#: evibes/settings/unfold.py:140 +msgid "Brands" +msgstr "品牌" + +#: evibes/settings/unfold.py:145 +msgid "Blogposts" +msgstr "博客文章" diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index 41311357..83e4979d 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -69,36 +69,6 @@ UNFOLD = { "icon": "construction", "link": reverse_lazy("admin:core_config_changelist"), }, - { - "title": _("Users"), - "icon": "person", - "link": reverse_lazy("admin:vibes_auth_user_changelist"), - }, - { - "title": _("Groups"), - "icon": "people", - "link": reverse_lazy("admin:vibes_auth_group_changelist"), - }, - { - "title": _("Products"), - "icon": "storefront", - "link": reverse_lazy("admin:core_product_changelist"), - }, - { - "title": _("Categories"), - "icon": "category", - "link": reverse_lazy("admin:core_category_changelist"), - }, - { - "title": _("Brands"), - "icon": "copyright", - "link": reverse_lazy("admin:core_brand_changelist"), - }, - { - "title": _("Blogposts"), - "icon": "newspaper", - "link": reverse_lazy("admin:blog_post_changelist"), - }, { "title": _("Periodic Tasks"), "icon": "event_list", @@ -136,6 +106,48 @@ UNFOLD = { }, ], }, + { + "title": _("Quick Links"), + "separator": True, + "collapsible": False, + "items": [ + { + "title": _("Users"), + "icon": "person", + "link": reverse_lazy("admin:vibes_auth_user_changelist"), + }, + { + "title": _("Groups"), + "icon": "people", + "link": reverse_lazy("admin:vibes_auth_group_changelist"), + }, + { + "title": _("Orders"), + "icon": "package", + "link": reverse_lazy("admin:core_order_changelist"), + }, + { + "title": _("Products"), + "icon": "storefront", + "link": reverse_lazy("admin:core_product_changelist"), + }, + { + "title": _("Categories"), + "icon": "category", + "link": reverse_lazy("admin:core_category_changelist"), + }, + { + "title": _("Brands"), + "icon": "copyright", + "link": reverse_lazy("admin:core_brand_changelist"), + }, + { + "title": _("Blogposts"), + "icon": "newspaper", + "link": reverse_lazy("admin:blog_post_changelist"), + }, + ], + }, ], }, } From b305876feba3c139df6cc6a6bfbc4c284ced2a78 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 16:03:11 +0300 Subject: [PATCH 16/18] Features: 1) Add "eVibes" version display in admin dashboard footer; Fixes: 1) Remove dashboard title exclusion logic; 2) Refactor quick links to include title, link, and optional icon; Extra: 1) Add separator and version text component; 2) Update template to render version info; 3) Minor formatting cleanup. --- engine/core/templates/admin/index.html | 13 ++++++++++++- engine/core/views.py | 10 ++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html index 51f9dafc..9782937a 100644 --- a/engine/core/templates/admin/index.html +++ b/engine/core/templates/admin/index.html @@ -17,6 +17,7 @@ {% component "unfold/components/container.html" %} {% component "unfold/components/title.html" %} {% trans "Dashboard" %} +
{% endcomponent %}
@@ -147,5 +148,15 @@ {% endcomponent %}
+ + {% component "unfold/components/separator.html" %} + {% endcomponent %} + +
+ {% component "unfold/components/text.html" with class="text-center text-xs text-gray-500 dark:text-gray-400" %} + "eVibes" {{ evibes_version }} · "Wiseless Team" + {% endcomponent %} +
+ {% endcomponent %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/engine/core/views.py b/engine/core/views.py index 1ab9528f..5e467e2a 100644 --- a/engine/core/views.py +++ b/engine/core/views.py @@ -430,10 +430,11 @@ def dashboard_callback(request, context): link = item.get("link") if not title or not link: continue - if str(title).lower() == "dashboard": - continue - url = str(link) - quick_links.append({"name": str(title), "href": url}) + quick_links.append({ + "title": str(title), + "link": str(link), + **({"icon": item.get("icon")} if item.get("icon") else {}), + }) most_wished: dict[str, str | int | float | None] | None = None with suppress(Exception): @@ -481,6 +482,7 @@ def dashboard_callback(request, context): "revenue_net_30": revenue_net_30, "returns_30": returns_30, "processed_orders_30": processed_orders_30, + "evibes_version": settings.EVIBES_VERSION, "quick_links": quick_links, "most_wished_product": most_wished, "most_popular_product": most_popular, From d139b7daf6aa922ba4ff13f989cabf2f11052725 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 16:11:14 +0300 Subject: [PATCH 17/18] Features: 1) Enhance quick links rendering with flexible class styling; Fixes: 1) Fix inconsistent indentation and formatting in quick links construction; Extra: 1) Add class attribute to navigation component for layout control; 2) Improve readability by using consistent block structure. --- engine/core/templates/admin/index.html | 2 +- engine/core/views.py | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html index 9782937a..b1a1319a 100644 --- a/engine/core/templates/admin/index.html +++ b/engine/core/templates/admin/index.html @@ -104,7 +104,7 @@ {% trans "Quick Links" %} {% endcomponent %} {% if quick_links %} - {% component "unfold/components/navigation.html" with items=quick_links %} + {% component "unfold/components/navigation.html" with class="flex flex-col gap-1" items=quick_links %} {% endcomponent %} {% else %} {% component "unfold/components/text.html" %} diff --git a/engine/core/views.py b/engine/core/views.py index 5e467e2a..012211c3 100644 --- a/engine/core/views.py +++ b/engine/core/views.py @@ -430,11 +430,13 @@ def dashboard_callback(request, context): link = item.get("link") if not title or not link: continue - quick_links.append({ - "title": str(title), - "link": str(link), - **({"icon": item.get("icon")} if item.get("icon") else {}), - }) + quick_links.append( + { + "title": str(title), + "link": str(link), + **({"icon": item.get("icon")} if item.get("icon") else {}), + } + ) most_wished: dict[str, str | int | float | None] | None = None with suppress(Exception): From d4ea32c375422c21212a0497ee12a02ad1103697 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 16:25:11 +0300 Subject: [PATCH 18/18] Features: 1) Refactored sales vs returns chart rendering for improved structure and readability; Fixes: 1) Fixed inconsistent whitespace in image tag attributes; Extra: 1) Added missing line break for visual spacing; 2) Updated footer text for consistency and clarity. --- engine/core/templates/admin/index.html | 83 ++++++++++++++------------ 1 file changed, 44 insertions(+), 39 deletions(-) diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html index b1a1319a..48f0f5c2 100644 --- a/engine/core/templates/admin/index.html +++ b/engine/core/templates/admin/index.html @@ -60,43 +60,45 @@
{% with gross=revenue_gross_30|default:0 returns=returns_30|default:0 %} - {% with total=gross|add:returns %} - {% component "unfold/components/card.html" with class="xl:col-span-2" %} - {% component "unfold/components/title.html" %} - {% trans "Sales vs Returns (30d)" %} - {% endcomponent %} - {% if total and total > 0 %} - {% widthratio gross total 360 as gross_deg %} - - + {% component "unfold/components/separator.html" %} {% endcomponent %}
+
{% component "unfold/components/text.html" with class="text-center text-xs text-gray-500 dark:text-gray-400" %} - "eVibes" {{ evibes_version }} · "Wiseless Team" + eVibes {{ evibes_version }} · Wiseless Team {% endcomponent %}

\n" "Language-Team: BRITISH ENGLISH \n" @@ -27,8 +27,11 @@ msgstr "กำลังใช้งานอยู่" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "หากตั้งค่าเป็น false, วัตถุนี้ไม่สามารถมองเห็นได้โดยผู้ใช้ที่ไม่มีสิทธิ์ที่ต้องการ" +"if set to false, this object can't be seen by users without needed " +"permission" +msgstr "" +"หากตั้งค่าเป็น false, " +"วัตถุนี้ไม่สามารถมองเห็นได้โดยผู้ใช้ที่ไม่มีสิทธิ์ที่ต้องการ" #: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" @@ -46,89 +49,89 @@ msgstr "แก้ไขแล้ว" msgid "when the object was last modified" msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "การแปล" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "ทั่วไป" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "ความสัมพันธ์" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "ข้อมูลเพิ่มเติม" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "เมตาดาตา" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "เวลาที่บันทึก" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "ค่าคุณสมบัติ" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "ค่าของแอตทริบิวต์" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "ภาพ" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "รูปภาพ" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "สต็อก" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "หุ้น" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "สั่งซื้อสินค้า" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "สั่งซื้อสินค้า" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "เด็ก" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "การกำหนดค่า" @@ -152,7 +155,8 @@ msgstr "ส่งมอบแล้ว" msgid "canceled" msgstr "ยกเลิก" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "ล้มเหลว" @@ -193,7 +197,7 @@ msgstr "" "OpenApi3 schema สำหรับ API นี้. รูปแบบสามารถเลือกได้ผ่านการเจรจาเนื้อหา. " "ภาษาสามารถเลือกได้ทั้งผ่าน Accept-Language และพารามิเตอร์ค้นหา." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "แคช I/O" @@ -202,8 +206,8 @@ msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -"ใช้เฉพาะคีย์เพื่ออ่านข้อมูลที่ได้รับอนุญาตจากแคช ใช้คีย์ ข้อมูล และระยะเวลาหมดอายุ " -"พร้อมการยืนยันตัวตนเพื่อเขียนข้อมูลลงในแคช" +"ใช้เฉพาะคีย์เพื่ออ่านข้อมูลที่ได้รับอนุญาตจากแคช ใช้คีย์ ข้อมูล " +"และระยะเวลาหมดอายุ พร้อมการยืนยันตัวตนเพื่อเขียนข้อมูลลงในแคช" #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -217,7 +221,7 @@ msgstr "รับพารามิเตอร์ที่สามารถเ msgid "send a message to the support team" msgstr "ส่งข้อความถึงทีมสนับสนุน" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "ขอ URL ที่รองรับ CORS เท่านั้น อนุญาตเฉพาะ https" @@ -238,7 +242,8 @@ msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -"ซื้อสินค้าในฐานะธุรกิจ โดยใช้ `products` ที่ให้มาพร้อมกับ `product_uuid` และ `attributes`" +"ซื้อสินค้าในฐานะธุรกิจ โดยใช้ `products` ที่ให้มาพร้อมกับ `product_uuid` และ" +" `attributes`" #: engine/core/docs/drf/views.py:164 msgid "download a digital asset from purchased digital order" @@ -262,11 +267,15 @@ msgstr "ลบกลุ่มแอตทริบิวต์" #: engine/core/docs/drf/viewsets.py:89 msgid "rewrite an existing attribute group saving non-editables" -msgstr "เขียนกลุ่มคุณลักษณะที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนกลุ่มคุณลักษณะที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของกลุ่มแอตทริบิวต์ที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" +msgstr "" +"เขียนฟิลด์บางส่วนของกลุ่มแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:106 msgid "list all attributes (simple view)" @@ -290,7 +299,9 @@ msgstr "เขียนแอตทริบิวต์ที่มีอยู #: engine/core/docs/drf/viewsets.py:141 msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" +msgstr "" +"เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" #: engine/core/docs/drf/viewsets.py:151 msgid "list all attribute values (simple view)" @@ -313,8 +324,11 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "เขียนค่าแอตทริบิวต์ที่มีอยู่ใหม่โดยเก็บค่าที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของค่าแอตทริบิวต์ที่มีอยู่ใหม่ โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" +msgstr "" +"เขียนฟิลด์บางส่วนของค่าแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 msgid "list all categories (simple view)" @@ -342,13 +356,15 @@ msgstr "เขียนหมวดหมู่ที่มีอยู่ให #: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245 msgid "rewrite some fields of an existing category saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -366,11 +382,11 @@ msgstr "สำหรับผู้ใช้ที่ไม่ใช่พนั #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"การค้นหาส่วนย่อยโดยไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่ใน human_readable_id, order_products." -"product.name และ order_products.product.partnumber" +"การค้นหาส่วนย่อยโดยไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่ใน human_readable_id, " +"order_products.product.name และ order_products.product.partnumber" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -390,7 +406,8 @@ msgstr "กรองตามหมายเลขคำสั่งซื้อ #: engine/core/docs/drf/viewsets.py:308 msgid "Filter by user's email (case-insensitive exact match)" -msgstr "กรองตามอีเมลของผู้ใช้ (ตรงตามตัวอักษรโดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก)" +msgstr "" +"กรองตามอีเมลของผู้ใช้ (ตรงตามตัวอักษรโดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก)" #: engine/core/docs/drf/viewsets.py:313 msgid "Filter by user's UUID" @@ -398,17 +415,18 @@ msgstr "กรองตาม UUID ของผู้ใช้" #: engine/core/docs/drf/viewsets.py:318 msgid "Filter by order status (case-insensitive substring match)" -msgstr "กรองตามสถานะคำสั่งซื้อ (การจับคู่สตริงย่อยโดยไม่คำนึงตัวพิมพ์ใหญ่/เล็ก)" +msgstr "" +"กรองตามสถานะคำสั่งซื้อ (การจับคู่สตริงย่อยโดยไม่คำนึงตัวพิมพ์ใหญ่/เล็ก)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "เรียงลำดับโดยหนึ่งใน: uuid, human_readable_id, user_email, user, status, " -"created, modified, buy_time, random. นำหน้าด้วย '-' สำหรับเรียงลำดับจากมากไปน้อย " -"(เช่น '-buy_time')." +"created, modified, buy_time, random. นำหน้าด้วย '-' " +"สำหรับเรียงลำดับจากมากไปน้อย (เช่น '-buy_time')." #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -436,7 +454,9 @@ msgstr "เขียนหมวดหมู่ที่มีอยู่ให #: engine/core/docs/drf/viewsets.py:373 msgid "rewrite some fields of an existing order saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:380 msgid "purchase an order" @@ -449,8 +469,8 @@ msgid "" "transaction is initiated." msgstr "" "สรุปการสั่งซื้อสินค้า หากใช้ `force_balance` " -"การสั่งซื้อจะเสร็จสมบูรณ์โดยใช้ยอดเงินคงเหลือของผู้ใช้ หากใช้ `force_payment` " -"จะเริ่มการทำธุรกรรม" +"การสั่งซื้อจะเสร็จสมบูรณ์โดยใช้ยอดเงินคงเหลือของผู้ใช้ หากใช้ " +"`force_payment` จะเริ่มการทำธุรกรรม" #: engine/core/docs/drf/viewsets.py:397 msgid "retrieve current pending order of a user" @@ -460,7 +480,7 @@ msgstr "ดึงคำสั่งซื้อที่รอดำเนิน msgid "retrieves a current pending order of an authenticated user" msgstr "ดึงคำสั่งซื้อที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "ซื้อสินค้าโดยไม่ต้องสร้างบัญชี" @@ -476,7 +496,8 @@ msgstr "เพิ่มสินค้าในคำสั่งซื้อ" msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." -msgstr "เพิ่มสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" +msgstr "" +"เพิ่มสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" #: engine/core/docs/drf/viewsets.py:429 msgid "add a list of products to order, quantities will not count" @@ -486,7 +507,9 @@ msgstr "เพิ่มรายการสินค้าที่ต้อง msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." -msgstr "เพิ่มรายการสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" +msgstr "" +"เพิ่มรายการสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` " +"ที่ให้มา" #: engine/core/docs/drf/viewsets.py:438 msgid "remove product from order" @@ -496,7 +519,8 @@ msgstr "ลบสินค้าออกจากคำสั่งซื้อ msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." -msgstr "ลบผลิตภัณฑ์ออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" +msgstr "" +"ลบผลิตภัณฑ์ออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" #: engine/core/docs/drf/viewsets.py:447 msgid "remove product from order, quantities will not count" @@ -506,7 +530,9 @@ msgstr "นำสินค้าออกจากคำสั่งซื้อ msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" -msgstr "ลบรายการสินค้าออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" +msgstr "" +"ลบรายการสินค้าออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` " +"ที่ให้มา" #: engine/core/docs/drf/viewsets.py:459 msgid "list all wishlists (simple view)" @@ -514,7 +540,9 @@ msgstr "แสดงรายการคุณลักษณะทั้งห #: engine/core/docs/drf/viewsets.py:460 msgid "for non-staff users, only their own wishlists are returned." -msgstr "สำหรับผู้ใช้ที่ไม่ใช่บุคลากร จะแสดงเฉพาะรายการที่อยู่ในรายการสิ่งที่ต้องการของตนเองเท่านั้น" +msgstr "" +"สำหรับผู้ใช้ที่ไม่ใช่บุคลากร " +"จะแสดงเฉพาะรายการที่อยู่ในรายการสิ่งที่ต้องการของตนเองเท่านั้น" #: engine/core/docs/drf/viewsets.py:467 msgid "retrieve a single wishlist (detailed view)" @@ -538,7 +566,9 @@ msgstr "เขียนแอตทริบิวต์ที่มีอยู #: engine/core/docs/drf/viewsets.py:496 msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" +msgstr "" +"เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" #: engine/core/docs/drf/viewsets.py:503 msgid "retrieve current pending wishlist of a user" @@ -546,7 +576,8 @@ msgstr "ดึงรายการสินค้าที่ผู้ใช้ #: engine/core/docs/drf/viewsets.py:504 msgid "retrieves a current pending wishlist of an authenticated user" -msgstr "ดึงรายการความปรารถนาที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว" +msgstr "" +"ดึงรายการความปรารถนาที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว" #: engine/core/docs/drf/viewsets.py:514 msgid "add product to wishlist" @@ -570,7 +601,9 @@ msgstr "เพิ่มสินค้าหลายรายการลงใ #: engine/core/docs/drf/viewsets.py:533 msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "เพิ่มสินค้าหลายรายการลงในรายการสินค้าที่ต้องการโดยใช้ `product_uuids` ที่ให้มา" +msgstr "" +"เพิ่มสินค้าหลายรายการลงในรายการสินค้าที่ต้องการโดยใช้ `product_uuids` " +"ที่ให้มา" #: engine/core/docs/drf/viewsets.py:541 msgid "remove many products from wishlist" @@ -579,34 +612,22 @@ msgstr "ลบสินค้าออกจากคำสั่งซื้อ #: engine/core/docs/drf/viewsets.py:542 msgid "" "removes many products from an wishlist using the provided `product_uuids`" -msgstr "ลบผลิตภัณฑ์หลายรายการออกจากรายการที่ต้องการโดยใช้ `product_uuids` ที่ให้มา" +msgstr "" +"ลบผลิตภัณฑ์หลายรายการออกจากรายการที่ต้องการโดยใช้ `product_uuids` ที่ให้มา" #: engine/core/docs/drf/viewsets.py:549 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" -"กรองตามชื่อ/ค่าของแอตทริบิวต์หนึ่งรายการหรือมากกว่า • **ไวยากรณ์**: `attr_name=method-" -"value[;attr2=method2-value2]…` •**วิธีการ** (ค่าเริ่มต้นคือ `icontains` " -"หากไม่ได้ระบุ): `iexact`, `exact`, `icontains`, `contains`, `isnull`, " -"`startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, " -"`lt`, `lte`, `gt`, `gte`, `in` •**การกำหนดประเภทข้อมูล**: JSON " -"จะถูกพยายามแปลงก่อน (ดังนั้นคุณสามารถส่งรายการ/ดิคชันนารีได้), `true`/`false` สำหรับบูลีน, " -"จำนวนเต็ม, จำนวนทศนิยม; มิฉะนั้นจะถือว่าเป็นสตริง. • **Base64**: นำหน้าด้วย `b64-` " -"เพื่อเข้ารหัส base64 ที่ปลอดภัยสำหรับ URL ของค่าดิบ. \n" -"ตัวอย่าง: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" +"กรองตามชื่อ/ค่าของแอตทริบิวต์หนึ่งรายการหรือมากกว่า • **ไวยากรณ์**: `attr_name=method-value[;attr2=method2-value2]…` •**วิธีการ** (ค่าเริ่มต้นคือ `icontains` หากไม่ได้ระบุ): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` •**การกำหนดประเภทข้อมูล**: JSON จะถูกพยายามแปลงก่อน (ดังนั้นคุณสามารถส่งรายการ/ดิคชันนารีได้), `true`/`false` สำหรับบูลีน, จำนวนเต็ม, จำนวนทศนิยม; มิฉะนั้นจะถือว่าเป็นสตริง. • **Base64**: นำหน้าด้วย `b64-` เพื่อเข้ารหัส base64 ที่ปลอดภัยสำหรับ URL ของค่าดิบ. \n" +"ตัวอย่าง: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" #: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 msgid "list all products (simple view)" @@ -618,13 +639,12 @@ msgstr "(exact) รหัส UUID ของผลิตภัณฑ์" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"รายการฟิลด์ที่คั่นด้วยเครื่องหมายจุลภาคเพื่อเรียงลำดับ โดยให้ขึ้นต้นด้วย `-` " -"สำหรับการเรียงลำดับจากน้อยไปมาก **ที่อนุญาต:** uuid, rating, name, slug, created, " -"modified, price, random" +"รายการฟิลด์ที่คั่นด้วยเครื่องหมายจุลภาคเพื่อเรียงลำดับ โดยให้ขึ้นต้นด้วย `-`" +" สำหรับการเรียงลำดับจากน้อยไปมาก **ที่อนุญาต:** uuid, rating, name, slug, " +"created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -637,6 +657,9 @@ msgid "Product UUID or slug" msgstr "รหัส UUID ของผลิตภัณฑ์ หรือชื่อเรียก" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "สร้างผลิตภัณฑ์" @@ -647,7 +670,8 @@ msgstr "เขียนใหม่ผลิตภัณฑ์ที่มีอ #: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648 msgid "" "update some fields of an existing product, preserving non-editable fields" -msgstr "อัปเดตบางฟิลด์ของสินค้าที่มีอยู่แล้ว โดยคงฟิลด์ที่ไม่สามารถแก้ไขได้ไว้" +msgstr "" +"อัปเดตบางฟิลด์ของสินค้าที่มีอยู่แล้ว โดยคงฟิลด์ที่ไม่สามารถแก้ไขได้ไว้" #: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 msgid "delete a product" @@ -719,7 +743,9 @@ msgstr "เขียนใหม่ข้อเสนอแนะที่มี #: engine/core/docs/drf/viewsets.py:851 msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:861 msgid "list all order–product relations (simple view)" @@ -727,7 +753,9 @@ msgstr "แสดงความสัมพันธ์ระหว่างค #: engine/core/docs/drf/viewsets.py:871 msgid "retrieve a single order–product relation (detailed view)" -msgstr "ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว (มุมมองรายละเอียด)" +msgstr "" +"ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว " +"(มุมมองรายละเอียด)" #: engine/core/docs/drf/viewsets.py:881 msgid "create a new order–product relation" @@ -747,7 +775,8 @@ msgstr "ลบความสัมพันธ์ระหว่างคำส #: engine/core/docs/drf/viewsets.py:921 msgid "add or remove feedback on an order–product relation" -msgstr "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" +msgstr "" +"เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" #: engine/core/docs/drf/viewsets.py:938 msgid "list all brands (simple view)" @@ -775,7 +804,9 @@ msgstr "เขียนใหม่แบรนด์ที่มีอยู่ #: engine/core/docs/drf/viewsets.py:981 msgid "rewrite some fields of an existing brand saving non-editables" -msgstr "เขียนข้อมูลในบางช่องของแบรนด์ที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนข้อมูลในบางช่องของแบรนด์ที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:1006 msgid "list all vendors (simple view)" @@ -799,7 +830,9 @@ msgstr "เขียนใหม่ผู้ขายที่มีอยู่ #: engine/core/docs/drf/viewsets.py:1041 msgid "rewrite some fields of an existing vendor saving non-editables" -msgstr "เขียนข้อมูลในบางช่องของซัพพลายเออร์ที่มีอยู่แล้วใหม่ โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" +msgstr "" +"เขียนข้อมูลในบางช่องของซัพพลายเออร์ที่มีอยู่แล้วใหม่ " +"โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" #: engine/core/docs/drf/viewsets.py:1051 msgid "list all product images (simple view)" @@ -823,7 +856,9 @@ msgstr "เขียนภาพสินค้าที่มีอยู่ใ #: engine/core/docs/drf/viewsets.py:1086 msgid "rewrite some fields of an existing product image saving non-editables" -msgstr "เขียนข้อมูลบางส่วนของภาพสินค้าที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนข้อมูลบางส่วนของภาพสินค้าที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:1096 msgid "list all promo codes (simple view)" @@ -847,7 +882,9 @@ msgstr "เขียนโค้ดโปรโมชั่นใหม่โด #: engine/core/docs/drf/viewsets.py:1131 msgid "rewrite some fields of an existing promo code saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของรหัสโปรโมชั่นที่มีอยู่ใหม่ โดยคงค่าที่ไม่สามารถแก้ไขได้ไว้" +msgstr "" +"เขียนฟิลด์บางส่วนของรหัสโปรโมชั่นที่มีอยู่ใหม่ " +"โดยคงค่าที่ไม่สามารถแก้ไขได้ไว้" #: engine/core/docs/drf/viewsets.py:1141 msgid "list all promotions (simple view)" @@ -871,7 +908,9 @@ msgstr "เขียนโปรโมชั่นใหม่โดยคงส #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" -msgstr "เขียนข้อมูลบางส่วนของโปรโมชั่นที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนข้อมูลบางส่วนของโปรโมชั่นที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:1186 msgid "list all stocks (simple view)" @@ -895,7 +934,9 @@ msgstr "เขียนบันทึกสต็อกที่มีอยู #: engine/core/docs/drf/viewsets.py:1221 msgid "rewrite some fields of an existing stock record saving non-editables" -msgstr "เขียนฟิลด์บางส่วนของบันทึกสต็อกที่มีอยู่ใหม่ โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนฟิลด์บางส่วนของบันทึกสต็อกที่มีอยู่ใหม่ " +"โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/docs/drf/viewsets.py:1231 msgid "list all product tags (simple view)" @@ -919,7 +960,9 @@ msgstr "เขียนแท็กสินค้าที่มีอยู่ #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" -msgstr "เขียนข้อมูลบางส่วนของแท็กสินค้าที่มีอยู่แล้วใหม่ โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" +msgstr "" +"เขียนข้อมูลบางส่วนของแท็กสินค้าที่มีอยู่แล้วใหม่ " +"โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" #: engine/core/elasticsearch/__init__.py:122 #: engine/core/elasticsearch/__init__.py:570 @@ -1049,244 +1092,247 @@ msgstr "ระดับ" msgid "Product UUID" msgstr "รหัส UUID ของผลิตภัณฑ์" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "กุญแจที่ต้องค้นหาหรือติดตั้งไว้ในแคช" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "ข้อมูลที่จะเก็บไว้ในแคช" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "เวลาหมดในวินาทีเพื่อตั้งค่าข้อมูลสำหรับเก็บในแคช" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "ข้อมูลที่เก็บไว้ในแคช" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ไม่พบคำสั่งซื้อ {order_uuid}!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "นำสินค้าทั้งหมดออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "ซื้อคำสั่ง" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" +msgstr "" +"กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "ดำเนินการกับรายการสินค้าในลำดับ" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "ลบ/เพิ่ม" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "การกระทำต้องเป็น \"เพิ่ม\" หรือ \"ลบ\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "ดำเนินการกับรายการสินค้าในรายการสินค้าที่ต้องการ" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "กรุณาให้ค่า `wishlist_uuid`" -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "รายการที่อยากได้ {wishlist_uuid} ไม่พบ!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "ซื้อคำสั่ง" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "กรุณาส่งแอตทริบิวต์ในรูปแบบสตริงที่จัดรูปแบบดังนี้ attr1=value1,attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" +msgstr "" +"กรุณาส่งแอตทริบิวต์ในรูปแบบสตริงที่จัดรูปแบบดังนี้ attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "เพิ่มหรือลบความคิดเห็นสำหรับสินค้าที่สั่งซื้อ" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "การกระทำต้องเป็น `add` หรือ `remove` เท่านั้น!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "ไม่พบคำสั่งซื้อสินค้า {order_product_uuid}!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "ต้องอยู่ระหว่าง 1 ถึง 10" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "คุณลักษณะ" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "กลุ่มคุณสมบัติ" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "กลุ่มของลักษณะ" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "หมวดหมู่" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "แบรนด์" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "หมวดหมู่" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "เปอร์เซ็นต์มาร์กอัป" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "คุณลักษณะและคุณค่าใดที่สามารถใช้สำหรับกรองหมวดหมู่นี้ได้" -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "ราคาต่ำสุดและราคาสูงสุดสำหรับสินค้าในหมวดนี้ (หากมี)" -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "แท็กสำหรับหมวดหมู่นี้" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "สินค้าในหมวดหมู่" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "ผู้ขาย" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "ละติจูด (พิกัด Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "ลองจิจูด (พิกัด X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "อย่างไร" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "ให้คะแนนตั้งแต่ 1 ถึง 10 รวมทั้งสองค่า หรือ 0 หากไม่ได้กำหนด" -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "แสดงความคิดเห็นจากผู้ใช้" -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "การแจ้งเตือน" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "ข้อเสนอแนะ" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1294,53 +1340,53 @@ msgstr "" "ที่อยู่สำหรับจัดส่งสำหรับคำสั่งซื้อนี้, " "ปล่อยว่างไว้หากเป็นที่อยู่เดียวกับที่อยู่สำหรับเรียกเก็บเงินหรือหากไม่เกี่ยวข้อง" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "ราคาทั้งหมดของคำสั่งซื้อนี้" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "จำนวนรวมของผลิตภัณฑ์ในคำสั่งซื้อ" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "สินค้าทั้งหมดในคำสั่งซื้อนี้เป็นสินค้าดิจิทัลหรือไม่" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "คำสั่ง" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL ของรูปภาพ" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "รูปภาพของสินค้า" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "หมวดหมู่" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "ข้อเสนอแนะ" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "แบรนด์" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "กลุ่มคุณลักษณะ" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1348,7 +1394,7 @@ msgstr "กลุ่มคุณลักษณะ" msgid "price" msgstr "ราคา" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1356,39 +1402,39 @@ msgstr "ราคา" msgid "quantity" msgstr "ปริมาณ" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "จำนวนความคิดเห็น" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "ราคาลดพิเศษ" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "ผลิตภัณฑ์" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "รหัสส่งเสริมการขาย" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "สินค้าลดราคา" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "โปรโมชั่น" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "ผู้ขาย" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1396,98 +1442,98 @@ msgstr "ผู้ขาย" msgid "product" msgstr "สินค้า" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "สินค้าที่อยู่ในรายการต้องการ" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "รายการสิ่งที่ต้องการ" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "สินค้าที่ติดแท็ก" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "แท็กสินค้า" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "หมวดหมู่ที่ถูกติดแท็ก" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "หมวดหมู่' แท็ก" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "ชื่อโครงการ" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "ชื่อบริษัท" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "ที่อยู่บริษัท" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "หมายเลขโทรศัพท์บริษัท" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "'อีเมลจาก', บางครั้งจำเป็นต้องใช้แทนค่าผู้ใช้โฮสต์" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "ผู้ใช้โฮสต์อีเมล" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "จำนวนเงินสูงสุดสำหรับการชำระเงิน" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "จำนวนเงินขั้นต่ำสำหรับการชำระเงิน" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "ข้อมูลการวิเคราะห์" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "ข้อมูลโฆษณา" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "การกำหนดค่า" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "รหัสภาษา" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "ชื่อภาษา" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "ธงภาษา, หากมีอยู่ :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "รับรายการภาษาที่รองรับ" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "ผลการค้นหาสินค้า" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "ผลการค้นหาสินค้า" @@ -1498,7 +1544,8 @@ msgid "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." msgstr "" -"แทนกลุ่มของแอตทริบิวต์ ซึ่งสามารถมีลำดับชั้นได้ คลาสนี้ใช้เพื่อจัดการและจัดระเบียบกลุ่มแอตทริบิวต์ " +"แทนกลุ่มของแอตทริบิวต์ ซึ่งสามารถมีลำดับชั้นได้ " +"คลาสนี้ใช้เพื่อจัดการและจัดระเบียบกลุ่มแอตทริบิวต์ " "กลุ่มแอตทริบิวต์สามารถมีกลุ่มแม่ได้ ทำให้เกิดโครงสร้างลำดับชั้น " "ซึ่งสามารถมีประโยชน์ในการจัดหมวดหมู่และจัดการแอตทริบิวต์ได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่ซับซ้อน" @@ -1528,16 +1575,17 @@ msgid "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." msgstr "" -"แทนหน่วยงานผู้ขายที่สามารถจัดเก็บข้อมูลเกี่ยวกับผู้ขายภายนอกและข้อกำหนดในการโต้ตอบของพวกเขาได้ " -"คลาสผู้ขายถูกใช้เพื่อกำหนดและจัดการข้อมูลที่เกี่ยวข้องกับผู้ขายภายนอก มันจัดเก็บชื่อผู้ขาย " -"รายละเอียดการตรวจสอบสิทธิ์ที่จำเป็นสำหรับการสื่อสาร " +"แทนหน่วยงานผู้ขายที่สามารถจัดเก็บข้อมูลเกี่ยวกับผู้ขายภายนอกและข้อกำหนดในการโต้ตอบของพวกเขาได้" +" คลาสผู้ขายถูกใช้เพื่อกำหนดและจัดการข้อมูลที่เกี่ยวข้องกับผู้ขายภายนอก " +"มันจัดเก็บชื่อผู้ขาย รายละเอียดการตรวจสอบสิทธิ์ที่จำเป็นสำหรับการสื่อสาร " "และเปอร์เซ็นต์การเพิ่มราคาที่นำไปใช้กับสินค้าที่นำมาจากผู้ขาย " "โมเดลนี้ยังรักษาข้อมูลเมตาเพิ่มเติมและข้อจำกัด " "ทำให้เหมาะสำหรับการใช้งานในระบบที่มีการโต้ตอบกับผู้ขายภายนอก" #: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" -msgstr "เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย" +msgstr "" +"เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย" #: engine/core/models.py:125 msgid "authentication info" @@ -1584,8 +1632,8 @@ msgid "" "metadata customization for administrative purposes." msgstr "" "แทนแท็กผลิตภัณฑ์ที่ใช้ในการจัดประเภทหรือระบุผลิตภัณฑ์ คลาส ProductTag " -"ถูกออกแบบมาเพื่อระบุและจัดประเภทผลิตภัณฑ์อย่างเป็นเอกลักษณ์ผ่านการรวมกันของตัวระบุแท็กภายในและชื่อแสดงผลที่ใช้งานง่าย " -"รองรับการดำเนินการที่ส่งออกผ่าน mixins " +"ถูกออกแบบมาเพื่อระบุและจัดประเภทผลิตภัณฑ์อย่างเป็นเอกลักษณ์ผ่านการรวมกันของตัวระบุแท็กภายในและชื่อแสดงผลที่ใช้งานง่าย" +" รองรับการดำเนินการที่ส่งออกผ่าน mixins " "และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ" #: engine/core/models.py:209 engine/core/models.py:240 @@ -1638,13 +1686,13 @@ msgid "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." msgstr "" -"แทนถึงเอนทิตีประเภทเพื่อจัดระเบียบและจัดกลุ่มรายการที่เกี่ยวข้องในโครงสร้างลำดับชั้น " -"หมวดหมู่สามารถมีความสัมพันธ์ลำดับชั้นกับหมวดหมู่อื่น ๆ ได้ ซึ่งสนับสนุนความสัมพันธ์แบบพ่อแม่-" -"ลูกคลาสนี้ประกอบด้วยฟิลด์สำหรับข้อมูลเมตาและตัวแทนภาพ " -"ซึ่งทำหน้าที่เป็นพื้นฐานสำหรับคุณสมบัติที่เกี่ยวข้องกับหมวดหมู่ " -"คลาสนี้มักใช้เพื่อกำหนดและจัดการหมวดหมู่สินค้าหรือการจัดกลุ่มที่คล้ายกันภายในแอปพลิเคชัน " -"ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่ " -"รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" +"แทนถึงเอนทิตีประเภทเพื่อจัดระเบียบและจัดกลุ่มรายการที่เกี่ยวข้องในโครงสร้างลำดับชั้น" +" หมวดหมู่สามารถมีความสัมพันธ์ลำดับชั้นกับหมวดหมู่อื่น ๆ ได้ " +"ซึ่งสนับสนุนความสัมพันธ์แบบพ่อแม่-ลูกคลาสนี้ประกอบด้วยฟิลด์สำหรับข้อมูลเมตาและตัวแทนภาพ" +" ซึ่งทำหน้าที่เป็นพื้นฐานสำหรับคุณสมบัติที่เกี่ยวข้องกับหมวดหมู่ " +"คลาสนี้มักใช้เพื่อกำหนดและจัดการหมวดหมู่สินค้าหรือการจัดกลุ่มที่คล้ายกันภายในแอปพลิเคชัน" +" ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่" +" รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" #: engine/core/models.py:274 msgid "upload an image representing this category" @@ -1695,10 +1743,11 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"แทนวัตถุแบรนด์ในระบบ คลาสนี้จัดการข้อมูลและคุณลักษณะที่เกี่ยวข้องกับแบรนด์ รวมถึงชื่อ โลโก้ " -"คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " +"แทนวัตถุแบรนด์ในระบบ คลาสนี้จัดการข้อมูลและคุณลักษณะที่เกี่ยวข้องกับแบรนด์ " +"รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " "ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" #: engine/core/models.py:448 @@ -1743,18 +1792,19 @@ msgstr "หมวดหมู่" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" -"แสดงถึงสต็อกของสินค้าที่จัดการในระบบ คลาสนี้ให้รายละเอียดเกี่ยวกับความสัมพันธ์ระหว่างผู้จำหน่าย, " -"สินค้า, และข้อมูลสต็อกของพวกเขา รวมถึงคุณสมบัติที่เกี่ยวข้องกับสินค้าคงคลัง เช่น ราคา, ราคาซื้อ, " -"จำนวน, รหัสสินค้า (SKU), และสินทรัพย์ดิจิทัล " -"เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ " -"ได้" +"แสดงถึงสต็อกของสินค้าที่จัดการในระบบ " +"คลาสนี้ให้รายละเอียดเกี่ยวกับความสัมพันธ์ระหว่างผู้จำหน่าย, สินค้า, " +"และข้อมูลสต็อกของพวกเขา รวมถึงคุณสมบัติที่เกี่ยวข้องกับสินค้าคงคลัง เช่น " +"ราคา, ราคาซื้อ, จำนวน, รหัสสินค้า (SKU), และสินทรัพย์ดิจิทัล " +"เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" +" ได้" #: engine/core/models.py:520 msgid "the vendor supplying this product stock" @@ -1832,11 +1882,13 @@ msgid "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." msgstr "" -"แสดงถึงผลิตภัณฑ์ที่มีคุณลักษณะต่างๆ เช่น หมวดหมู่, แบรนด์, แท็ก, สถานะดิจิทัล, ชื่อ, คำอธิบาย, " -"หมายเลขชิ้นส่วน, และ slug ให้คุณสมบัติประโยชน์ที่เกี่ยวข้องเพื่อดึงคะแนน, จำนวนความคิดเห็น, " -"ราคา, จำนวนสินค้า, และยอดสั่งซื้อทั้งหมด " +"แสดงถึงผลิตภัณฑ์ที่มีคุณลักษณะต่างๆ เช่น หมวดหมู่, แบรนด์, แท็ก, " +"สถานะดิจิทัล, ชื่อ, คำอธิบาย, หมายเลขชิ้นส่วน, และ slug " +"ให้คุณสมบัติประโยชน์ที่เกี่ยวข้องเพื่อดึงคะแนน, จำนวนความคิดเห็น, ราคา, " +"จำนวนสินค้า, และยอดสั่งซื้อทั้งหมด " "ออกแบบมาเพื่อใช้ในระบบที่จัดการอีคอมเมิร์ซหรือการจัดการสินค้าคงคลัง " -"คลาสนี้โต้ตอบกับโมเดลที่เกี่ยวข้อง (เช่น หมวดหมู่, แบรนด์, และแท็กผลิตภัณฑ์) " +"คลาสนี้โต้ตอบกับโมเดลที่เกี่ยวข้อง (เช่น หมวดหมู่, แบรนด์, และแท็กผลิตภัณฑ์)" +" " "และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" #: engine/core/models.py:585 @@ -1892,14 +1944,15 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "แทนคุณสมบัติในระบบ. คลาสนี้ใช้เพื่อกำหนดและจัดการคุณสมบัติ " -"ซึ่งเป็นข้อมูลที่สามารถปรับแต่งได้ซึ่งสามารถเชื่อมโยงกับเอนทิตีอื่น ๆ ได้. คุณสมบัติมีหมวดหมู่, กลุ่ม, " -"ประเภทค่า, และชื่อที่เกี่ยวข้อง. แบบจำลองรองรับหลายประเภทของค่า รวมถึงสตริง, จำนวนเต็ม, " -"จำนวนทศนิยม, บูลีน, อาร์เรย์, และออบเจ็กต์. " +"ซึ่งเป็นข้อมูลที่สามารถปรับแต่งได้ซึ่งสามารถเชื่อมโยงกับเอนทิตีอื่น ๆ ได้. " +"คุณสมบัติมีหมวดหมู่, กลุ่ม, ประเภทค่า, และชื่อที่เกี่ยวข้อง. " +"แบบจำลองรองรับหลายประเภทของค่า รวมถึงสตริง, จำนวนเต็ม, จำนวนทศนิยม, บูลีน, " +"อาร์เรย์, และออบเจ็กต์. " "ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น." #: engine/core/models.py:733 @@ -1961,11 +2014,12 @@ msgstr "คุณสมบัติ" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"แทนค่าเฉพาะสำหรับคุณลักษณะที่เชื่อมโยงกับผลิตภัณฑ์ มันเชื่อมโยง 'คุณลักษณะ' กับ 'ค่า' ที่ไม่ซ้ำกัน " +"แทนค่าเฉพาะสำหรับคุณลักษณะที่เชื่อมโยงกับผลิตภัณฑ์ มันเชื่อมโยง 'คุณลักษณะ' " +"กับ 'ค่า' ที่ไม่ซ้ำกัน " "ทำให้การจัดระเบียบและการแสดงลักษณะของผลิตภัณฑ์เป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น" #: engine/core/models.py:788 @@ -1983,14 +2037,16 @@ msgstr "ค่าเฉพาะสำหรับคุณสมบัติน #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" -"แสดงภาพสินค้าที่เกี่ยวข้องกับสินค้าในระบบ. คลาสนี้ออกแบบมาเพื่อจัดการภาพสำหรับสินค้า " +"แสดงภาพสินค้าที่เกี่ยวข้องกับสินค้าในระบบ. " +"คลาสนี้ออกแบบมาเพื่อจัดการภาพสำหรับสินค้า " "รวมถึงฟังก์ชันสำหรับการอัปโหลดไฟล์ภาพ, การเชื่อมโยงกับสินค้าเฉพาะ, " -"และการกำหนดลำดับการแสดงผล. นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ " +"และการกำหนดลำดับการแสดงผล. " +"นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ " "โดยให้ข้อความทางเลือกสำหรับภาพ." #: engine/core/models.py:826 @@ -2031,13 +2087,13 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "แสดงถึงแคมเปญส่งเสริมการขายสำหรับสินค้าที่มีส่วนลด. " -"คลาสนี้ใช้เพื่อกำหนดและจัดการแคมเปญส่งเสริมการขายที่มอบส่วนลดเป็นเปอร์เซ็นต์สำหรับสินค้า. " -"คลาสนี้ประกอบด้วยคุณสมบัติสำหรับการตั้งค่าอัตราส่วนลด, ให้รายละเอียดเกี่ยวกับโปรโมชั่น, " -"และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " +"คลาสนี้ใช้เพื่อกำหนดและจัดการแคมเปญส่งเสริมการขายที่มอบส่วนลดเป็นเปอร์เซ็นต์สำหรับสินค้า." +" คลาสนี้ประกอบด้วยคุณสมบัติสำหรับการตั้งค่าอัตราส่วนลด, " +"ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " "คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." #: engine/core/models.py:880 @@ -2079,9 +2135,10 @@ msgid "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." msgstr "" -"แสดงรายการสินค้าที่ผู้ใช้ต้องการเก็บไว้เพื่อจัดการและค้นหาสินค้าที่ต้องการในอนาคต " -"คลาสนี้ให้บริการฟังก์ชันสำหรับการจัดการคอลเลกชันของสินค้า " -"ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" +"แสดงรายการสินค้าที่ผู้ใช้ต้องการเก็บไว้เพื่อจัดการและค้นหาสินค้าที่ต้องการในอนาคต" +" คลาสนี้ให้บริการฟังก์ชันสำหรับการจัดการคอลเลกชันของสินค้า " +"ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " +"ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2105,14 +2162,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "แทนเอกสารบันทึกที่เกี่ยวข้องกับผลิตภัณฑ์. " "คลาสนี้ใช้เพื่อเก็บข้อมูลเกี่ยวกับเอกสารที่เกี่ยวข้องกับผลิตภัณฑ์เฉพาะ " "รวมถึงการอัปโหลดไฟล์และข้อมูลเมตาของไฟล์. " -"คลาสนี้มีเมธอดและคุณสมบัติเพื่อจัดการกับประเภทไฟล์และเส้นทางจัดเก็บสำหรับไฟล์เอกสาร. " -"คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ และให้คุณสมบัติเพิ่มเติมตามความต้องการ." +"คลาสนี้มีเมธอดและคุณสมบัติเพื่อจัดการกับประเภทไฟล์และเส้นทางจัดเก็บสำหรับไฟล์เอกสาร." +" คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " +"และให้คุณสมบัติเพิ่มเติมตามความต้องการ." #: engine/core/models.py:998 msgid "documentary" @@ -2128,23 +2186,24 @@ msgstr "ยังไม่ได้รับการแก้ไข" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "แทนที่หน่วยงานที่อยู่ซึ่งรวมถึงรายละเอียดตำแหน่งและความสัมพันธ์กับผู้ใช้ " "ให้ฟังก์ชันสำหรับการจัดเก็บข้อมูลทางภูมิศาสตร์และที่อยู่ " "รวมถึงการผสานรวมกับบริการการเข้ารหัสทางภูมิศาสตร์ " -"คลาสนี้ถูกออกแบบมาเพื่อจัดเก็บข้อมูลที่อยู่โดยละเอียด รวมถึงองค์ประกอบเช่น ถนน เมือง ภูมิภาค " -"ประเทศ และตำแหน่งทางภูมิศาสตร์ (ลองจิจูดและละติจูด) รองรับการผสานรวมกับ API " -"การเข้ารหัสทางภูมิศาสตร์ ทำให้สามารถจัดเก็บการตอบสนองของ API " -"ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้ " -"ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" +"คลาสนี้ถูกออกแบบมาเพื่อจัดเก็บข้อมูลที่อยู่โดยละเอียด รวมถึงองค์ประกอบเช่น " +"ถนน เมือง ภูมิภาค ประเทศ และตำแหน่งทางภูมิศาสตร์ (ลองจิจูดและละติจูด) " +"รองรับการผสานรวมกับ API การเข้ารหัสทางภูมิศาสตร์ " +"ทำให้สามารถจัดเก็บการตอบสนองของ API " +"ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" +" ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2207,12 +2266,13 @@ msgid "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." msgstr "" -"แสดงรหัสโปรโมชั่นที่สามารถใช้เพื่อรับส่วนลด การจัดการความถูกต้อง ประเภทของส่วนลด " -"และการใช้งาน คลาส PromoCode จัดเก็บรายละเอียดเกี่ยวกับรหัสโปรโมชั่น รวมถึงตัวระบุที่ไม่ซ้ำกัน " -"คุณสมบัติของส่วนลด (จำนวนหรือเปอร์เซ็นต์) ระยะเวลาการใช้งาน ผู้ใช้ที่เกี่ยวข้อง (ถ้ามี) " -"และสถานะการใช้งาน " -"รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ " -"ได้รับการปฏิบัติตาม" +"แสดงรหัสโปรโมชั่นที่สามารถใช้เพื่อรับส่วนลด การจัดการความถูกต้อง " +"ประเภทของส่วนลด และการใช้งาน คลาส PromoCode " +"จัดเก็บรายละเอียดเกี่ยวกับรหัสโปรโมชั่น รวมถึงตัวระบุที่ไม่ซ้ำกัน " +"คุณสมบัติของส่วนลด (จำนวนหรือเปอร์เซ็นต์) ระยะเวลาการใช้งาน " +"ผู้ใช้ที่เกี่ยวข้อง (ถ้ามี) และสถานะการใช้งาน " +"รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" +" ได้รับการปฏิบัติตาม" #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" @@ -2299,16 +2359,19 @@ msgstr "ประเภทส่วนลดไม่ถูกต้องสำ msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" -"แทนคำสั่งซื้อที่ผู้ใช้ได้ทำการสั่งซื้อไว้ คลาสนี้จำลองคำสั่งซื้อภายในแอปพลิเคชัน รวมถึงคุณสมบัติต่าง ๆ " -"เช่น ข้อมูลการเรียกเก็บเงิน ข้อมูลการจัดส่ง สถานะ ผู้ใช้ที่เกี่ยวข้อง การแจ้งเตือน " -"และการดำเนินการที่เกี่ยวข้อง คำสั่งซื้อสามารถมีสินค้าที่เกี่ยวข้องได้ โปรโมชั่นสามารถนำมาใช้ได้ " -"ที่อยู่สามารถตั้งค่าได้ และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน " -"นอกจากนี้ ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" +"แทนคำสั่งซื้อที่ผู้ใช้ได้ทำการสั่งซื้อไว้ " +"คลาสนี้จำลองคำสั่งซื้อภายในแอปพลิเคชัน รวมถึงคุณสมบัติต่าง ๆ เช่น " +"ข้อมูลการเรียกเก็บเงิน ข้อมูลการจัดส่ง สถานะ ผู้ใช้ที่เกี่ยวข้อง " +"การแจ้งเตือน และการดำเนินการที่เกี่ยวข้อง " +"คำสั่งซื้อสามารถมีสินค้าที่เกี่ยวข้องได้ โปรโมชั่นสามารถนำมาใช้ได้ " +"ที่อยู่สามารถตั้งค่าได้ " +"และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ " +"ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2378,11 +2441,13 @@ msgstr "คำสั่ง" #: engine/core/models.py:1319 msgid "a user must have only one pending order at a time" -msgstr "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" +msgstr "" +"ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" #: engine/core/models.py:1351 msgid "you cannot add products to an order that is not a pending one" -msgstr "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" +msgstr "" +"คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" #: engine/core/models.py:1356 msgid "you cannot add inactive products to order" @@ -2395,7 +2460,8 @@ msgstr "คุณไม่สามารถเพิ่มสินค้าไ #: engine/core/models.py:1395 engine/core/models.py:1420 #: engine/core/models.py:1428 msgid "you cannot remove products from an order that is not a pending one" -msgstr "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" +msgstr "" +"คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" #: engine/core/models.py:1416 #, python-brace-format @@ -2408,7 +2474,8 @@ msgstr "รหัสโปรโมชั่นไม่มีอยู่" #: engine/core/models.py:1454 msgid "you can only buy physical products with shipping address specified" -msgstr "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" +msgstr "" +"คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" #: engine/core/models.py:1473 msgid "address does not exist" @@ -2443,14 +2510,15 @@ msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -"คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, อีเมลลูกค้า, " -"หมายเลขโทรศัพท์ลูกค้า" +"คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, " +"อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า" #: engine/core/models.py:1584 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" +msgstr "" +"วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" #: engine/core/models.py:1699 msgid "" @@ -2461,9 +2529,9 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" "จัดการข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์ " -"คลาสนี้ถูกออกแบบมาเพื่อรวบรวมและจัดเก็บข้อมูลข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์เฉพาะที่พวกเขาได้ซื้อ " -"ประกอบด้วยแอตทริบิวต์สำหรับจัดเก็บความคิดเห็นของผู้ใช้ การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ " -"และคะแนนที่ผู้ใช้กำหนด " +"คลาสนี้ถูกออกแบบมาเพื่อรวบรวมและจัดเก็บข้อมูลข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์เฉพาะที่พวกเขาได้ซื้อ" +" ประกอบด้วยแอตทริบิวต์สำหรับจัดเก็บความคิดเห็นของผู้ใช้ " +"การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด " "คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ" #: engine/core/models.py:1711 @@ -2475,7 +2543,8 @@ msgid "feedback comments" msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" #: engine/core/models.py:1720 @@ -2502,12 +2571,14 @@ msgid "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." msgstr "" -"แสดงผลิตภัณฑ์ที่เกี่ยวข้องกับคำสั่งซื้อและคุณลักษณะของผลิตภัณฑ์โมเดล OrderProduct " -"ดูแลข้อมูลเกี่ยวกับสินค้าที่เป็นส่วนหนึ่งของคำสั่งซื้อ รวมถึงรายละเอียดเช่น ราคาซื้อ จำนวน " -"คุณสมบัติของสินค้า และสถานะ โมเดลนี้จัดการการแจ้งเตือนสำหรับผู้ใช้และผู้ดูแลระบบ " +"แสดงผลิตภัณฑ์ที่เกี่ยวข้องกับคำสั่งซื้อและคุณลักษณะของผลิตภัณฑ์โมเดล " +"OrderProduct ดูแลข้อมูลเกี่ยวกับสินค้าที่เป็นส่วนหนึ่งของคำสั่งซื้อ " +"รวมถึงรายละเอียดเช่น ราคาซื้อ จำนวน คุณสมบัติของสินค้า และสถานะ " +"โมเดลนี้จัดการการแจ้งเตือนสำหรับผู้ใช้และผู้ดูแลระบบ " "และจัดการการดำเนินการเช่น การคืนสินค้าคงเหลือหรือการเพิ่มความคิดเห็น " -"โมเดลนี้ยังมีวิธีการและคุณสมบัติที่สนับสนุนตรรกะทางธุรกิจ เช่น การคำนวณราคารวมหรือการสร้าง URL " -"สำหรับดาวน์โหลดสินค้าดิจิทัล โมเดลนี้ผสานรวมกับโมเดล Order และ Product " +"โมเดลนี้ยังมีวิธีการและคุณสมบัติที่สนับสนุนตรรกะทางธุรกิจ เช่น " +"การคำนวณราคารวมหรือการสร้าง URL สำหรับดาวน์โหลดสินค้าดิจิทัล " +"โมเดลนี้ผสานรวมกับโมเดล Order และ Product " "และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" #: engine/core/models.py:1757 @@ -2616,14 +2687,14 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" -"แสดงถึงฟังก์ชันการดาวน์โหลดสำหรับสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ คลาส " -"DigitalAssetDownload " -"ให้ความสามารถในการจัดการและเข้าถึงการดาวน์โหลดที่เกี่ยวข้องกับผลิตภัณฑ์ในคำสั่งซื้อ " -"มันเก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ในคำสั่งซื้อที่เกี่ยวข้อง จำนวนการดาวน์โหลด " +"แสดงถึงฟังก์ชันการดาวน์โหลดสำหรับสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ " +"คลาส DigitalAssetDownload " +"ให้ความสามารถในการจัดการและเข้าถึงการดาวน์โหลดที่เกี่ยวข้องกับผลิตภัณฑ์ในคำสั่งซื้อ" +" มันเก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ในคำสั่งซื้อที่เกี่ยวข้อง จำนวนการดาวน์โหลด " "และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " "สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" @@ -2638,7 +2709,8 @@ msgstr "ดาวน์โหลด" #: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." -msgstr "คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ" +msgstr "" +"คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ" #: engine/core/sitemaps.py:25 msgid "Home" @@ -2681,12 +2753,12 @@ msgstr "สวัสดีครับ/ค่ะ %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "ขอบคุณสำหรับคำสั่งซื้อของคุณ #%(order.pk)s! " -"เราขอแจ้งให้คุณทราบว่าเราได้ดำเนินการตามคำสั่งซื้อของคุณแล้ว รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:" +"เราขอแจ้งให้คุณทราบว่าเราได้ดำเนินการตามคำสั่งซื้อของคุณแล้ว " +"รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2709,7 +2781,9 @@ msgstr "ราคาทั้งหมด" msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." -msgstr "หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ %(config.EMAIL_HOST_USER)s" +msgstr "" +"หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ " +"%(config.EMAIL_HOST_USER)s" #: engine/core/templates/digital_order_created_email.html:133 #, python-format @@ -2788,12 +2862,11 @@ msgstr "ขอบคุณที่เข้าพักกับเรา! เ #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" -"ขอบคุณสำหรับการสั่งซื้อของคุณ! เราขอแจ้งยืนยันการสั่งซื้อของคุณเรียบร้อยแล้ว " -"รายละเอียดการสั่งซื้อของคุณมีดังนี้:" +"ขอบคุณสำหรับการสั่งซื้อของคุณ! เราขอแจ้งยืนยันการสั่งซื้อของคุณเรียบร้อยแล้ว" +" รายละเอียดการสั่งซื้อของคุณมีดังนี้:" #: engine/core/templates/shipped_order_created_email.html:123 #: engine/core/templates/shipped_order_delivered_email.html:123 @@ -2828,23 +2901,23 @@ msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้อ #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | ติดต่อเรา เริ่มต้น" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | ติดต่อเรา เริ่มต้น" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | ยืนยันการสั่งซื้อ" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | ยืนยันการสั่งซื้อ" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | จัดส่งเรียบร้อย" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | จัดส่งเรียบร้อย" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2873,8 +2946,9 @@ msgid "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -"จัดการการตอบสนองมุมมองรายละเอียดสำหรับแผนผังเว็บไซต์ ฟังก์ชันนี้ประมวลผลคำขอ " -"ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-Type สำหรับ XML" +"จัดการการตอบสนองมุมมองรายละเอียดสำหรับแผนผังเว็บไซต์ ฟังก์ชันนี้ประมวลผลคำขอ" +" ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-" +"Type สำหรับ XML" #: engine/core/views.py:123 msgid "" @@ -2890,7 +2964,8 @@ msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -"จัดการการดำเนินการแคช เช่น การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" +"จัดการการดำเนินการแคช เช่น " +"การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -2901,7 +2976,8 @@ msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -"จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST ที่เข้ามา" +"จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST " +"ที่เข้ามา" #: engine/core/views.py:262 msgid "Handles global search queries." @@ -2914,13 +2990,11 @@ msgstr "จัดการตรรกะของการซื้อในฐ #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "จัดการการดาวน์โหลดสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ " -"ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ หากไม่พบไฟล์ " -"จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" +"ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" +" หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -2949,29 +3023,27 @@ msgstr "ไม่พบไอคอนเว็บไซต์" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" -"จัดการคำขอสำหรับไอคอนเว็บไซต์ (favicon) ฟังก์ชันนี้พยายามให้บริการไฟล์ favicon " -"ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon จะเกิดข้อผิดพลาด HTTP 404 " -"เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" +"จัดการคำขอสำหรับไอคอนเว็บไซต์ (favicon) ฟังก์ชันนี้พยายามให้บริการไฟล์ " +"favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " +"จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "เปลี่ยนเส้นทางคำขอไปยังหน้าดัชนีของผู้ดูแลระบบ ฟังก์ชันนี้จัดการคำขอ HTTP " -"ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django โดยใช้ฟังก์ชัน " -"`redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" +"ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " +"โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "ส่งคืนเวอร์ชันปัจจุบันของ eVibes" -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2979,25 +3051,27 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"กำหนดชุดมุมมองสำหรับการจัดการการดำเนินการที่เกี่ยวข้องกับ Evibes คลาส EvibesViewSet " -"สืบทอดมาจาก ModelViewSet " -"และให้ฟังก์ชันการทำงานสำหรับการจัดการการกระทำและการดำเนินการบนเอนทิตีของ Evibes " -"รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน การอนุญาตที่ปรับแต่งได้ " -"และรูปแบบการแสดงผล" +"กำหนดชุดมุมมองสำหรับการจัดการการดำเนินการที่เกี่ยวข้องกับ Evibes คลาส " +"EvibesViewSet สืบทอดมาจาก ModelViewSet " +"และให้ฟังก์ชันการทำงานสำหรับการจัดการการกระทำและการดำเนินการบนเอนทิตีของ " +"Evibes รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน " +"การอนุญาตที่ปรับแต่งได้ และรูปแบบการแสดงผล" -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" -"แสดงชุดมุมมองสำหรับการจัดการวัตถุ AttributeGroup ดำเนินการที่เกี่ยวข้องกับ AttributeGroup " -"รวมถึงการกรอง การแปลงข้อมูลเป็นรูปแบบที่ส่งผ่านได้ และการดึงข้อมูล คลาสนี้เป็นส่วนหนึ่งของชั้น " -"API ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล " -"AttributeGroup" +"แสดงชุดมุมมองสำหรับการจัดการวัตถุ AttributeGroup ดำเนินการที่เกี่ยวข้องกับ " +"AttributeGroup รวมถึงการกรอง การแปลงข้อมูลเป็นรูปแบบที่ส่งผ่านได้ " +"และการดึงข้อมูล คลาสนี้เป็นส่วนหนึ่งของชั้น API " +"ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล" +" AttributeGroup" -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3006,26 +3080,28 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุ Attribute ภายในแอปพลิเคชัน ให้ชุดของจุดสิ้นสุด API " -"สำหรับการโต้ตอบกับข้อมูล Attribute คลาสนี้จัดการการค้นหา การกรอง และการแปลงวัตถุ " -"Attribute เป็นรูปแบบที่อ่านได้ ช่วยให้สามารถควบคุมข้อมูลที่ส่งคืนได้อย่างยืดหยุ่น เช่น " -"การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ ขึ้นอยู่กับความต้องการของคำขอ" +"จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุ Attribute ภายในแอปพลิเคชัน " +"ให้ชุดของจุดสิ้นสุด API สำหรับการโต้ตอบกับข้อมูล Attribute " +"คลาสนี้จัดการการค้นหา การกรอง และการแปลงวัตถุ Attribute เป็นรูปแบบที่อ่านได้" +" ช่วยให้สามารถควบคุมข้อมูลที่ส่งคืนได้อย่างยืดหยุ่น เช่น " +"การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ " +"ขึ้นอยู่กับความต้องการของคำขอ" -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "ชุดมุมมองสำหรับการจัดการวัตถุ AttributeValue " -"ชุดมุมมองนี้ให้ฟังก์ชันการทำงานสำหรับการแสดงรายการ การดึงข้อมูล การสร้าง การอัปเดต " -"และการลบวัตถุ AttributeValue มันผสานรวมกับกลไกชุดมุมมองของ Django REST Framework " -"และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ ความสามารถในการกรองข้อมูลมีให้ผ่าน " -"DjangoFilterBackend" +"ชุดมุมมองนี้ให้ฟังก์ชันการทำงานสำหรับการแสดงรายการ การดึงข้อมูล การสร้าง " +"การอัปเดต และการลบวัตถุ AttributeValue มันผสานรวมกับกลไกชุดมุมมองของ Django " +"REST Framework และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ " +"ความสามารถในการกรองข้อมูลมีให้ผ่าน DjangoFilterBackend" -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3034,22 +3110,25 @@ msgid "" "can access specific data." msgstr "" "จัดการมุมมองสำหรับการดำเนินการที่เกี่ยวข้องกับหมวดหมู่ คลาส CategoryViewSet " -"รับผิดชอบในการจัดการการดำเนินการที่เกี่ยวข้องกับโมเดลหมวดหมู่ในระบบ มันรองรับการดึงข้อมูล " -"การกรอง และการแปลงข้อมูลหมวดหมู่เป็นรูปแบบที่ส่งต่อได้ " +"รับผิดชอบในการจัดการการดำเนินการที่เกี่ยวข้องกับโมเดลหมวดหมู่ในระบบ " +"มันรองรับการดึงข้อมูล การกรอง และการแปลงข้อมูลหมวดหมู่เป็นรูปแบบที่ส่งต่อได้" +" " "ชุดมุมมองนี้ยังบังคับใช้สิทธิ์การเข้าถึงเพื่อให้แน่ใจว่าเฉพาะผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงข้อมูลเฉพาะได้" -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." msgstr "" -"แทนชุดมุมมองสำหรับการจัดการอินสแตนซ์ของแบรนด์ คลาสนี้ให้ฟังก์ชันการทำงานสำหรับการค้นหา " -"การกรอง และการแปลงออบเจ็กต์แบรนด์เป็นรูปแบบที่ส่งผ่านได้ โดยใช้เฟรมเวิร์ก ViewSet ของ " -"Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น" +"แทนชุดมุมมองสำหรับการจัดการอินสแตนซ์ของแบรนด์ " +"คลาสนี้ให้ฟังก์ชันการทำงานสำหรับการค้นหา การกรอง " +"และการแปลงออบเจ็กต์แบรนด์เป็นรูปแบบที่ส่งผ่านได้ โดยใช้เฟรมเวิร์ก ViewSet " +"ของ Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API " +"สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น" -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3062,11 +3141,11 @@ msgstr "" "จัดการการดำเนินงานที่เกี่ยวข้องกับโมเดล `Product` ในระบบ " "คลาสนี้ให้ชุดมุมมองสำหรับการจัดการผลิตภัณฑ์ รวมถึงการกรอง การแปลงเป็นลำดับ " "และปฏิบัติการบนอินสแตนซ์เฉพาะ มันขยายจาก `EvibesViewSet` " -"เพื่อใช้ฟังก์ชันทั่วไปและผสานรวมกับเฟรมเวิร์ก Django REST สำหรับการดำเนินการ API แบบ " -"RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ " +"เพื่อใช้ฟังก์ชันทั่วไปและผสานรวมกับเฟรมเวิร์ก Django REST สำหรับการดำเนินการ" +" API แบบ RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ " "และการเข้าถึงข้อเสนอแนะที่เกี่ยวข้องของผลิตภัณฑ์" -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3074,93 +3153,99 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"แสดงชุดมุมมองสำหรับการจัดการวัตถุ Vendor ชุดมุมมองนี้อนุญาตให้ดึงข้อมูล กรอง และแปลงข้อมูล " -"Vendor เป็นรูปแบบที่อ่านได้ ชุดมุมมองนี้กำหนด queryset การกำหนดค่าตัวกรอง และคลาส " -"serializer ที่ใช้จัดการการดำเนินการต่างๆ " +"แสดงชุดมุมมองสำหรับการจัดการวัตถุ Vendor ชุดมุมมองนี้อนุญาตให้ดึงข้อมูล กรอง" +" และแปลงข้อมูล Vendor เป็นรูปแบบที่อ่านได้ ชุดมุมมองนี้กำหนด queryset " +"การกำหนดค่าตัวกรอง และคลาส serializer ที่ใช้จัดการการดำเนินการต่างๆ " "วัตถุประสงค์ของคลาสนี้คือการให้การเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Vendor " "อย่างมีประสิทธิภาพผ่านกรอบงาน Django REST" -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" -"การแสดงชุดมุมมองที่จัดการวัตถุข้อเสนอแนะ คลาสนี้จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุข้อเสนอแนะ " -"รวมถึงการแสดงรายการ การกรอง และการดึงรายละเอียด " -"วัตถุประสงค์ของชุดมุมมองนี้คือการจัดเตรียมตัวแปลงอนุกรมที่แตกต่างกันสำหรับการดำเนินการต่างๆ " -"และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน `EvibesViewSet` " -"และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" +"การแสดงชุดมุมมองที่จัดการวัตถุข้อเสนอแนะ " +"คลาสนี้จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุข้อเสนอแนะ รวมถึงการแสดงรายการ" +" การกรอง และการดึงรายละเอียด " +"วัตถุประสงค์ของชุดมุมมองนี้คือการจัดเตรียมตัวแปลงอนุกรมที่แตกต่างกันสำหรับการดำเนินการต่างๆ" +" และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " +"`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" -"ViewSet สำหรับการจัดการคำสั่งซื้อและกิจกรรมที่เกี่ยวข้อง คลาสนี้ให้ฟังก์ชันการทำงานในการดึงข้อมูล " -"แก้ไข และจัดการอ็อบเจ็กต์คำสั่งซื้อ รวมถึงจุดสิ้นสุดต่างๆ สำหรับการจัดการคำสั่งซื้อ เช่น " -"การเพิ่มหรือลบผลิตภัณฑ์ การดำเนินการซื้อสำหรับผู้ใช้ที่ลงทะเบียนและไม่ได้ลงทะเบียน " +"ViewSet สำหรับการจัดการคำสั่งซื้อและกิจกรรมที่เกี่ยวข้อง " +"คลาสนี้ให้ฟังก์ชันการทำงานในการดึงข้อมูล แก้ไข และจัดการอ็อบเจ็กต์คำสั่งซื้อ" +" รวมถึงจุดสิ้นสุดต่างๆ สำหรับการจัดการคำสั่งซื้อ เช่น " +"การเพิ่มหรือลบผลิตภัณฑ์ " +"การดำเนินการซื้อสำหรับผู้ใช้ที่ลงทะเบียนและไม่ได้ลงทะเบียน " "และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " "ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" -"ให้ชุดมุมมองสำหรับการจัดการเอนทิตี OrderProduct ชุดมุมมองนี้ช่วยให้สามารถดำเนินการ CRUD " -"และดำเนินการเฉพาะที่เกี่ยวกับโมเดล OrderProduct รวมถึงการกรอง การตรวจสอบสิทธิ์ " +"ให้ชุดมุมมองสำหรับการจัดการเอนทิตี OrderProduct " +"ชุดมุมมองนี้ช่วยให้สามารถดำเนินการ CRUD และดำเนินการเฉพาะที่เกี่ยวกับโมเดล " +"OrderProduct รวมถึงการกรอง การตรวจสอบสิทธิ์ " "และการสลับตัวแปลงตามการดำเนินการที่ร้องขอ " -"นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ " -"OrderProduct" +"นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" +" OrderProduct" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -msgstr "จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" +msgstr "" +"จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" -"ViewSet สำหรับการจัดการการดำเนินการในรายการที่ต้องการ (Wishlist) WishlistViewSet " -"ให้จุดเชื่อมต่อสำหรับการโต้ตอบกับรายการที่ต้องการของผู้ใช้ ซึ่งช่วยให้สามารถดึงข้อมูล แก้ไข " -"และปรับแต่งผลิตภัณฑ์ในรายการที่ต้องการได้ ViewSet นี้อำนวยความสะดวกในการทำงาน เช่น " -"การเพิ่ม การลบ และการดำเนินการแบบกลุ่มสำหรับผลิตภัณฑ์ในรายการที่ต้องการ " -"มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น " -"เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" +"ViewSet สำหรับการจัดการการดำเนินการในรายการที่ต้องการ (Wishlist) " +"WishlistViewSet ให้จุดเชื่อมต่อสำหรับการโต้ตอบกับรายการที่ต้องการของผู้ใช้ " +"ซึ่งช่วยให้สามารถดึงข้อมูล แก้ไข และปรับแต่งผลิตภัณฑ์ในรายการที่ต้องการได้ " +"ViewSet นี้อำนวยความสะดวกในการทำงาน เช่น การเพิ่ม การลบ " +"และการดำเนินการแบบกลุ่มสำหรับผลิตภัณฑ์ในรายการที่ต้องการ " +"มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" +" เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3170,15 +3255,16 @@ msgid "" msgstr "" "คลาสนี้ให้ฟังก์ชันการทำงานของ viewset สำหรับจัดการออบเจ็กต์ `Address` คลาส " "AddressViewSet ช่วยให้สามารถดำเนินการ CRUD การกรอง " -"และการดำเนินการที่กำหนดเองที่เกี่ยวข้องกับเอนทิตีที่อยู่ รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP " -"ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล และการจัดการสิทธิ์ตามบริบทของคำขอ" +"และการดำเนินการที่กำหนดเองที่เกี่ยวข้องกับเอนทิตีที่อยู่ " +"รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " +"และการจัดการสิทธิ์ตามบริบทของคำขอ" -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.mo b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo index 0885fd1d30e56d27db719dd34d99fb15b828b2b3..d96958d592501c0772585ffd7629c5e149d6476a 100644 GIT binary patch delta 5518 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 Cp8CQ7 delta 5465 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 VG{I@?@70zRjCUeSX68GC{|CMn-x>e_ diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.po b/engine/core/locale/tr_TR/LC_MESSAGES/django.po index 3cf019d0..97ad9f52 100644 --- a/engine/core/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/core/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Aktif mi" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "false olarak ayarlanırsa, bu nesne gerekli izne sahip olmayan kullanıcılar " "tarafından görülemez" @@ -50,89 +51,89 @@ msgstr "Değiştirilmiş" msgid "when the object was last modified" msgstr "Nesne en son ne zaman düzenlendi" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Çeviriler" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Genel" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "İlişkiler" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "EK BİLGİ" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Zaman Damgaları" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Seçili %(verbose_name_plural)s'ı etkinleştirin" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Seçilen öğeler etkinleştirildi!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Seçili %(verbose_name_plural)s'ı devre dışı bırak" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Seçilen öğeler devre dışı bırakıldı!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Öznitelik Değeri" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Öznitelik Değerleri" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Resim" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Görüntüler" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Stok" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stoklar" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Ürün Siparişi" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Sipariş Ürünleri" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Çocuklar" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Konfigürasyon" @@ -156,7 +157,8 @@ msgstr "Teslim edildi" msgid "canceled" msgstr "İptal edildi" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Başarısız" @@ -197,7 +199,7 @@ msgstr "" "Bu API için OpenApi3 şeması. Format, içerik anlaşması yoluyla seçilebilir. " "Dil, hem Accept-Language hem de sorgu parametresi ile seçilebilir." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Önbellek I/O" @@ -206,10 +208,8 @@ msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -"Önbellekten izin verilen verileri okumak için yalnızca bir anahtar " -"uygulayın.\n" -"Önbelleğe veri yazmak için kimlik doğrulama ile anahtar, veri ve zaman aşımı " -"uygulayın." +"Önbellekten izin verilen verileri okumak için yalnızca bir anahtar uygulayın.\n" +"Önbelleğe veri yazmak için kimlik doğrulama ile anahtar, veri ve zaman aşımı uygulayın." #: engine/core/docs/drf/views.py:62 msgid "get a list of supported languages" @@ -223,7 +223,7 @@ msgstr "Uygulamanın açığa çıkarılabilir parametrelerini alın" msgid "send a message to the support team" msgstr "Destek ekibine bir mesaj gönderin" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "CORS'lu bir URL isteyin. Yalnızca https'ye izin verilir." @@ -233,7 +233,8 @@ msgstr "Ürünler, kategoriler ve markalar arasında arama" #: engine/core/docs/drf/views.py:130 msgid "global search endpoint to query across project's tables" -msgstr "Proje tabloları arasında sorgulama yapmak için global arama uç noktası" +msgstr "" +"Proje tabloları arasında sorgulama yapmak için global arama uç noktası" #: engine/core/docs/drf/views.py:139 msgid "purchase an order as a business" @@ -273,10 +274,11 @@ msgstr "" "Düzenlenemeyenleri kaydederek mevcut bir öznitelik grubunu yeniden yazma" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" -"Mevcut bir öznitelik grubunun bazı alanlarını düzenlenemez olarak kaydederek " -"yeniden yazın" +"Mevcut bir öznitelik grubunun bazı alanlarını düzenlenemez olarak kaydederek" +" yeniden yazın" #: engine/core/docs/drf/viewsets.py:106 msgid "list all attributes (simple view)" @@ -326,10 +328,11 @@ msgstr "" "Düzenlenemeyenleri kaydederek mevcut bir öznitelik değerini yeniden yazma" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" -"Mevcut bir öznitelik değerinin bazı alanlarını düzenlenemeyenleri kaydederek " -"yeniden yazın" +"Mevcut bir öznitelik değerinin bazı alanlarını düzenlenemeyenleri kaydederek" +" yeniden yazın" #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 msgid "list all categories (simple view)" @@ -363,9 +366,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta anlık görüntüsü" @@ -384,11 +387,12 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"human_readable_id, order_products.product.name ve order_products.product." -"partnumber arasında büyük/küçük harfe duyarlı olmayan alt dize araması" +"human_readable_id, order_products.product.name ve " +"order_products.product.partnumber arasında büyük/küçük harfe duyarlı olmayan" +" alt dize araması" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -420,14 +424,14 @@ msgstr "Kullanıcının UUID'sine göre filtreleme" #: engine/core/docs/drf/viewsets.py:318 msgid "Filter by order status (case-insensitive substring match)" msgstr "" -"Sipariş durumuna göre filtreleme (büyük/küçük harfe duyarlı olmayan alt dize " -"eşleşmesi)" +"Sipariş durumuna göre filtreleme (büyük/küçük harfe duyarlı olmayan alt dize" +" eşleşmesi)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Şunlardan birine göre sıralayın: uuid, human_readable_id, user_email, user, " "status, created, modified, buy_time, random. Azalan için '-' ile önekleyin " @@ -473,8 +477,8 @@ msgid "" "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -"Sipariş alımını sonuçlandırır. Eğer `force_balance` kullanılırsa, satın alma " -"işlemi kullanıcının bakiyesi kullanılarak tamamlanır; Eğer `force_payment` " +"Sipariş alımını sonuçlandırır. Eğer `force_balance` kullanılırsa, satın alma" +" işlemi kullanıcının bakiyesi kullanılarak tamamlanır; Eğer `force_payment` " "kullanılırsa, bir işlem başlatılır." #: engine/core/docs/drf/viewsets.py:397 @@ -485,7 +489,7 @@ msgstr "Bir kullanıcının mevcut bekleyen siparişini al" msgid "retrieves a current pending order of an authenticated user" msgstr "kimliği doğrulanmış bir kullanıcının mevcut bekleyen siparişini alır" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "hesap oluşturmadan sipariş satın alma" @@ -549,7 +553,8 @@ msgstr "Tüm öznitelikleri listele (basit görünüm)" #: engine/core/docs/drf/viewsets.py:460 msgid "for non-staff users, only their own wishlists are returned." msgstr "" -"Personel olmayan kullanıcılar için yalnızca kendi istek listeleri döndürülür." +"Personel olmayan kullanıcılar için yalnızca kendi istek listeleri " +"döndürülür." #: engine/core/docs/drf/viewsets.py:467 msgid "retrieve a single wishlist (detailed view)" @@ -630,28 +635,18 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "Bir veya daha fazla öznitelik adı/değer çiftine göre filtreleyin. \n" "- Sözdizimi**: `attr_name=method-value[;attr2=method2-value2]...`\n" -"- **Metotlar** (atlanırsa varsayılan olarak `icontains` olur): `iexact`, " -"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, " -"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" -"- Değer tipleme**: JSON ilk olarak denenir (böylece listeleri/dicts'leri " -"geçirebilirsiniz), booleanlar, tamsayılar, floatlar için `true`/`false`; " -"aksi takdirde string olarak ele alınır. \n" -"- **Base64**: ham değeri URL güvenli base64 kodlamak için `b64-` ile " -"önekleyin. \n" +"- **Metotlar** (atlanırsa varsayılan olarak `icontains` olur): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n" +"- Değer tipleme**: JSON ilk olarak denenir (böylece listeleri/dicts'leri geçirebilirsiniz), booleanlar, tamsayılar, floatlar için `true`/`false`; aksi takdirde string olarak ele alınır. \n" +"- **Base64**: ham değeri URL güvenli base64 kodlamak için `b64-` ile önekleyin. \n" "Örnekler: \n" "color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" @@ -666,14 +661,11 @@ msgstr "(tam) Ürün UUID'si" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Sıralanacak alanların virgülle ayrılmış listesi. Azalan için `-` ile ön " -"ek. \n" -"**İzin verilenler:** uuid, derecelendirme, ad, slug, oluşturuldu, " -"değiştirildi, fiyat, rastgele" +"Sıralanacak alanların virgülle ayrılmış listesi. Azalan için `-` ile ön ek. \n" +"**İzin verilenler:** uuid, derecelendirme, ad, slug, oluşturuldu, değiştirildi, fiyat, rastgele" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -686,6 +678,9 @@ msgid "Product UUID or slug" msgstr "Ürün UUID'si veya Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Bir ürün oluşturun" @@ -1119,249 +1114,250 @@ msgstr "Seviye" msgid "Product UUID" msgstr "Ürün UUID'si" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Önbellekte aranacak veya önbelleğe yerleştirilecek anahtar" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Önbellekte depolanacak veriler" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Verileri önbelleğe almak için saniye cinsinden zaman aşımı" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Önbelleğe alınmış veriler" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "İstenen URL'den kameleştirilmiş JSON verileri" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Siparişe ürün ekleme" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Sipariş {order_uuid} bulunamadı!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Siparişten tüm ürünleri kaldırın" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Bir sipariş satın alın" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -"Lütfen order_uuid veya order_hr_id bilgilerinden birini sağlayın - birbirini " -"dışlayan bilgiler!" +"Lütfen order_uuid veya order_hr_id bilgilerinden birini sağlayın - birbirini" +" dışlayan bilgiler!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Siparişteki ürünlerin listesi üzerinde bir eylem gerçekleştirin" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Kaldır/Ekle" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Eylem ya \"ekle\" ya da \"kaldır\" olmalıdır!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "İstek listesindeki bir ürün listesi üzerinde eylem gerçekleştirme" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Lütfen `wishlist_uuid` değerini girin." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "İstek listesi {wishlist_uuid} bulunamadı!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Siparişe ürün ekleme" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Bir sipariş satın alın" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Lütfen öznitelikleri attr1=value1,attr2=value2 şeklinde biçimlendirilmiş " "dize olarak gönderin" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Orderproduct için bir geri bildirim ekleme veya silme" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Eylem ya `ekle` ya da `kaldır` olmalıdır!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} bulunamadı!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Limit 1 ile 10 arasında olmalıdır" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bir cazibe gibi çalışır" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Nitelikler" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Gruplandırılmış nitelikler" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Nitelik grupları" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Kategoriler" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Markalar" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategoriler" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "İşaretleme Yüzdesi" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "Varsa, bu kategorideki ürünler için minimum ve maksimum fiyatlar." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Bu kategori için etiketler" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Bu kategorideki ürünler" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Satıcılar" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Enlem (Y koordinatı)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Boylam (X koordinatı)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Nasıl yapılır" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1'den 10'a kadar (dahil) derecelendirme değeri veya ayarlanmamışsa 0." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Bildirimler" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Varsa, bu sipariş ürünü için URL'yi indirin" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Geri bildirim" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Bu siparişteki sipariş ürünlerinin bir listesi" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Fatura adresi" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1369,53 +1365,53 @@ msgstr "" "Bu sipariş için sevkiyat adresi, fatura adresi ile aynıysa veya geçerli " "değilse boş bırakın" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Bu siparişin toplam fiyatı" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Siparişteki toplam ürün miktarı" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Siparişteki tüm ürünler dijital mi" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Bu sipariş için işlemler" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Siparişler" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Resim URL'si" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Ürün görselleri" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Geri Bildirimler" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Marka" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Öznitelik grupları" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1423,7 +1419,7 @@ msgstr "Öznitelik grupları" msgid "price" msgstr "Fiyat" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1431,39 +1427,39 @@ msgstr "Fiyat" msgid "quantity" msgstr "Miktar" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Geri bildirim sayısı" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Ürünler sadece kişisel siparişler için mevcuttur" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "İndirimli fiyat" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Ürünler" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promosyon Kodları" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Satıştaki ürünler" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Promosyonlar" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Satıcı" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1471,98 +1467,98 @@ msgstr "Satıcı" msgid "product" msgstr "Ürün" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "İstek listesindeki ürünler" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Dilek Listeleri" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Etiketlenmiş ürünler" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Ürün etiketleri" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Etiketlenmiş kategoriler" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategoriler' etiketleri" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Proje adı" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Şirket Adı" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Şirket Adresi" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Şirket Telefon Numarası" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', bazen ana kullanıcı değeri yerine kullanılmalıdır" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "E-posta ana kullanıcısı" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Ödeme için maksimum tutar" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Ödeme için minimum tutar" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Analitik veriler" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Reklam verileri" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Konfigürasyon" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Dil kodu" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Dil adı" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Dil bayrağı, eğer varsa :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Desteklenen dillerin bir listesini alın" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Ürünler arama sonuçları" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Ürünler arama sonuçları" @@ -1575,9 +1571,9 @@ msgid "" msgstr "" "Hiyerarşik olabilen bir öznitelik grubunu temsil eder. Bu sınıf, öznitelik " "gruplarını yönetmek ve düzenlemek için kullanılır. Bir öznitelik grubu, " -"hiyerarşik bir yapı oluşturan bir üst gruba sahip olabilir. Bu, karmaşık bir " -"sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek " -"için yararlı olabilir." +"hiyerarşik bir yapı oluşturan bir üst gruba sahip olabilir. Bu, karmaşık bir" +" sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek" +" için yararlı olabilir." #: engine/core/models.py:91 msgid "parent of this group" @@ -1607,8 +1603,8 @@ msgid "" msgstr "" "Harici satıcılar ve bunların etkileşim gereksinimleri hakkında bilgi " "depolayabilen bir satıcı varlığını temsil eder. Satıcı sınıfı, harici bir " -"satıcıyla ilgili bilgileri tanımlamak ve yönetmek için kullanılır. Satıcının " -"adını, iletişim için gereken kimlik doğrulama ayrıntılarını ve satıcıdan " +"satıcıyla ilgili bilgileri tanımlamak ve yönetmek için kullanılır. Satıcının" +" adını, iletişim için gereken kimlik doğrulama ayrıntılarını ve satıcıdan " "alınan ürünlere uygulanan yüzde işaretlemesini saklar. Bu model ayrıca ek " "meta verileri ve kısıtlamaları da muhafaza ederek üçüncü taraf satıcılarla " "etkileşime giren sistemlerde kullanıma uygun hale getirir." @@ -1664,11 +1660,11 @@ msgid "" "metadata customization for administrative purposes." msgstr "" "Ürünleri sınıflandırmak veya tanımlamak için kullanılan bir ürün etiketini " -"temsil eder. ProductTag sınıfı, dahili bir etiket tanımlayıcısı ve kullanıcı " -"dostu bir ekran adı kombinasyonu aracılığıyla ürünleri benzersiz bir şekilde " -"tanımlamak ve sınıflandırmak için tasarlanmıştır. Mixin'ler aracılığıyla " -"dışa aktarılan işlemleri destekler ve yönetimsel amaçlar için meta veri " -"özelleştirmesi sağlar." +"temsil eder. ProductTag sınıfı, dahili bir etiket tanımlayıcısı ve kullanıcı" +" dostu bir ekran adı kombinasyonu aracılığıyla ürünleri benzersiz bir " +"şekilde tanımlamak ve sınıflandırmak için tasarlanmıştır. Mixin'ler " +"aracılığıyla dışa aktarılan işlemleri destekler ve yönetimsel amaçlar için " +"meta veri özelleştirmesi sağlar." #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1723,8 +1719,8 @@ msgid "" msgstr "" "İlgili öğeleri hiyerarşik bir yapıda düzenlemek ve gruplamak için bir " "kategori varlığını temsil eder. Kategoriler, ebeveyn-çocuk ilişkilerini " -"destekleyen diğer kategorilerle hiyerarşik ilişkilere sahip olabilir. Sınıf, " -"kategoriyle ilgili özellikler için bir temel görevi gören meta veri ve " +"destekleyen diğer kategorilerle hiyerarşik ilişkilere sahip olabilir. Sınıf," +" kategoriyle ilgili özellikler için bir temel görevi gören meta veri ve " "görsel temsil alanları içerir. Bu sınıf genellikle bir uygulama içinde ürün " "kategorilerini veya diğer benzer gruplamaları tanımlamak ve yönetmek için " "kullanılır ve kullanıcıların veya yöneticilerin kategorilerin adını, " @@ -1780,7 +1776,8 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" "Sistemdeki bir Marka nesnesini temsil eder. Bu sınıf, adı, logoları, " "açıklaması, ilişkili kategorileri, benzersiz bir slug ve öncelik sırası " @@ -1830,8 +1827,8 @@ msgstr "Kategoriler" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1840,8 +1837,8 @@ msgstr "" "Sistemde yönetilen bir ürünün stokunu temsil eder. Bu sınıf, satıcılar, " "ürünler ve bunların stok bilgileri arasındaki ilişkinin yanı sıra fiyat, " "satın alma fiyatı, miktar, SKU ve dijital varlıklar gibi envanterle ilgili " -"özellikler hakkında ayrıntılar sağlar. Çeşitli satıcılardan temin edilebilen " -"ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter " +"özellikler hakkında ayrıntılar sağlar. Çeşitli satıcılardan temin edilebilen" +" ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter " "yönetim sisteminin bir parçasıdır." #: engine/core/models.py:520 @@ -1983,8 +1980,8 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Sistemdeki bir özniteliği temsil eder. Bu sınıf, diğer varlıklarla " @@ -2054,9 +2051,9 @@ msgstr "Öznitelik" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" "Bir ürünle bağlantılı bir nitelik için belirli bir değeri temsil eder. " "'Niteliği' benzersiz bir 'değere' bağlayarak ürün özelliklerinin daha iyi " @@ -2077,14 +2074,14 @@ msgstr "Bu öznitelik için özel değer" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" "Sistemdeki bir ürünle ilişkilendirilmiş bir ürün resmini temsil eder. Bu " -"sınıf, görüntü dosyalarını yükleme, bunları belirli ürünlerle ilişkilendirme " -"ve görüntüleme sıralarını belirleme işlevleri dahil olmak üzere ürün " +"sınıf, görüntü dosyalarını yükleme, bunları belirli ürünlerle ilişkilendirme" +" ve görüntüleme sıralarını belirleme işlevleri dahil olmak üzere ürün " "görüntülerini yönetmek için tasarlanmıştır. Ayrıca görüntüler için " "alternatif metin içeren bir erişilebilirlik özelliği de içerir." @@ -2126,8 +2123,8 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" "İndirimli ürünler için bir promosyon kampanyasını temsil eder. Bu sınıf, " "ürünler için yüzdeye dayalı bir indirim sunan promosyon kampanyalarını " @@ -2175,10 +2172,10 @@ msgid "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." msgstr "" -"İstenen ürünleri depolamak ve yönetmek için bir kullanıcının istek listesini " -"temsil eder. Sınıf, bir ürün koleksiyonunu yönetmek için işlevsellik sağlar, " -"ürün ekleme ve kaldırma gibi işlemlerin yanı sıra aynı anda birden fazla " -"ürün ekleme ve kaldırma işlemlerini destekler." +"İstenen ürünleri depolamak ve yönetmek için bir kullanıcının istek listesini" +" temsil eder. Sınıf, bir ürün koleksiyonunu yönetmek için işlevsellik " +"sağlar, ürün ekleme ve kaldırma gibi işlemlerin yanı sıra aynı anda birden " +"fazla ürün ekleme ve kaldırma işlemlerini destekler." #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2202,14 +2199,14 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Bir ürüne bağlı bir belgesel kaydını temsil eder. Bu sınıf, dosya " "yüklemeleri ve meta verileri dahil olmak üzere belirli ürünlerle ilgili " "belgeseller hakkında bilgi depolamak için kullanılır. Belgesel dosyalarının " -"dosya türünü ve depolama yolunu işlemek için yöntemler ve özellikler içerir. " -"Belirli mixin'lerin işlevselliğini genişletir ve ek özel özellikler sağlar." +"dosya türünü ve depolama yolunu işlemek için yöntemler ve özellikler içerir." +" Belirli mixin'lerin işlevselliğini genişletir ve ek özel özellikler sağlar." #: engine/core/models.py:998 msgid "documentary" @@ -2225,19 +2222,19 @@ msgstr "Çözümlenmemiş" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Konum ayrıntılarını ve bir kullanıcıyla ilişkileri içeren bir adres " -"varlığını temsil eder. Coğrafi ve adres verilerinin depolanmasının yanı sıra " -"coğrafi kodlama hizmetleriyle entegrasyon için işlevsellik sağlar. Bu sınıf, " -"sokak, şehir, bölge, ülke ve coğrafi konum (enlem ve boylam) gibi " +"varlığını temsil eder. Coğrafi ve adres verilerinin depolanmasının yanı sıra" +" coğrafi kodlama hizmetleriyle entegrasyon için işlevsellik sağlar. Bu " +"sınıf, sokak, şehir, bölge, ülke ve coğrafi konum (enlem ve boylam) gibi " "bileşenleri içeren ayrıntılı adres bilgilerini depolamak için " "tasarlanmıştır. Coğrafi kodlama API'leri ile entegrasyonu destekler ve daha " "fazla işleme veya inceleme için ham API yanıtlarının depolanmasını sağlar. " @@ -2316,7 +2313,8 @@ msgstr "" #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" msgstr "" -"Bir kullanıcı tarafından indirimden yararlanmak için kullanılan benzersiz kod" +"Bir kullanıcı tarafından indirimden yararlanmak için kullanılan benzersiz " +"kod" #: engine/core/models.py:1088 msgid "promo code identifier" @@ -2400,16 +2398,16 @@ msgstr "Promosyon kodu {self.uuid} için geçersiz indirim türü!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "Bir kullanıcı tarafından verilen bir siparişi temsil eder. Bu sınıf, fatura " "ve kargo bilgileri, durum, ilişkili kullanıcı, bildirimler ve ilgili " "işlemler gibi çeşitli öznitelikleri dahil olmak üzere uygulama içinde bir " -"siparişi modeller. Siparişler ilişkili ürünlere sahip olabilir, promosyonlar " -"uygulanabilir, adresler ayarlanabilir ve kargo veya fatura ayrıntıları " +"siparişi modeller. Siparişler ilişkili ürünlere sahip olabilir, promosyonlar" +" uygulanabilir, adresler ayarlanabilir ve kargo veya fatura ayrıntıları " "güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " "ürünlerin yönetilmesini de destekler." @@ -2520,7 +2518,8 @@ msgstr "Adres mevcut değil" #: engine/core/models.py:1494 engine/core/models.py:1563 msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "Şu anda satın alamazsınız, lütfen birkaç dakika içinde tekrar deneyin." +msgstr "" +"Şu anda satın alamazsınız, lütfen birkaç dakika içinde tekrar deneyin." #: engine/core/models.py:1497 engine/core/models.py:1559 msgid "invalid force value" @@ -2569,8 +2568,8 @@ msgstr "" "aldıkları belirli ürünler için kullanıcı geri bildirimlerini yakalamak ve " "saklamak üzere tasarlanmıştır. Kullanıcı yorumlarını saklamak için " "öznitelikler, siparişteki ilgili ürüne bir referans ve kullanıcı tarafından " -"atanan bir derecelendirme içerir. Sınıf, geri bildirim verilerini etkili bir " -"şekilde modellemek ve yönetmek için veritabanı alanlarını kullanır." +"atanan bir derecelendirme içerir. Sınıf, geri bildirim verilerini etkili bir" +" şekilde modellemek ve yönetmek için veritabanı alanlarını kullanır." #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2582,9 +2581,11 @@ msgid "feedback comments" msgstr "Geri bildirim yorumları" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "" -"Bu geri bildirimin ilgili olduğu siparişteki belirli bir ürüne atıfta bulunur" +"Bu geri bildirimin ilgili olduğu siparişteki belirli bir ürüne atıfta " +"bulunur" #: engine/core/models.py:1720 msgid "related order product" @@ -2726,15 +2727,15 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Siparişlerle ilişkili dijital varlıklar için indirme işlevselliğini temsil " "eder. DigitalAssetDownload sınıfı, sipariş ürünleriyle ilgili indirmeleri " "yönetme ve bunlara erişme olanağı sağlar. İlişkili sipariş ürünü, indirme " -"sayısı ve varlığın herkese açık olup olmadığı hakkında bilgi tutar. İlişkili " -"sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " +"sayısı ve varlığın herkese açık olup olmadığı hakkında bilgi tutar. İlişkili" +" sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " "oluşturmaya yönelik bir yöntem içerir." #: engine/core/models.py:1961 @@ -2749,8 +2750,8 @@ msgstr "İndirmeler" msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -"geri̇ bi̇ldi̇ri̇m eklemek i̇çi̇n bi̇r yorum, puan ve si̇pari̇ş ürün uuid'si̇ " -"sağlamalisiniz." +"geri̇ bi̇ldi̇ri̇m eklemek i̇çi̇n bi̇r yorum, puan ve si̇pari̇ş ürün uuid'si̇" +" sağlamalisiniz." #: engine/core/sitemaps.py:25 msgid "Home" @@ -2793,8 +2794,7 @@ msgstr "Merhaba %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Siparişiniz için teşekkür ederiz #%(order.pk)s! Siparişinizi işleme " @@ -2853,8 +2853,8 @@ msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "" -"Siparişinizi başarıyla işleme aldık №%(order_uuid)s! Siparişinizin detayları " -"aşağıdadır:" +"Siparişinizi başarıyla işleme aldık №%(order_uuid)s! Siparişinizin detayları" +" aşağıdadır:" #: engine/core/templates/digital_order_delivered_email.html:128 msgid "" @@ -2909,8 +2909,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Siparişiniz için teşekkür ederiz! Satın alma işleminizi onaylamaktan " @@ -2951,23 +2950,23 @@ msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıd #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | bi̇zi̇mle i̇leti̇şi̇me geçi̇n" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | bi̇zi̇mle i̇leti̇şi̇me geçi̇n" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Sipariş Onayı" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | si̇pari̇ş onayi" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Sipariş Teslim Edildi" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | sipariş teslim edildi" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | verilen promosyon kodu" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | verilen promosyon kodu" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2996,9 +2995,9 @@ msgid "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -"Bir site haritası için ayrıntılı görünüm yanıtını işler. Bu fonksiyon isteği " -"işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-Type " -"başlığını ayarlar." +"Bir site haritası için ayrıntılı görünüm yanıtını işler. Bu fonksiyon isteği" +" işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-" +"Type başlığını ayarlar." #: engine/core/views.py:123 msgid "" @@ -3016,8 +3015,8 @@ msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -"Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama " -"gibi önbellek işlemlerini gerçekleştirir." +"Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama" +" gibi önbellek işlemlerini gerçekleştirir." #: engine/core/views.py:201 msgid "Handles `contact us` form submissions." @@ -3042,14 +3041,10 @@ msgstr "Kayıt olmadan bir işletme olarak satın alma mantığını ele alır." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Bir siparişle ilişkili bir dijital varlığın indirilmesini yönetir.\n" -"Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını " -"sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek " -"için bir HTTP 404 hatası verilir." +"Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3078,19 +3073,15 @@ msgstr "favicon bulunamadı" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Bir web sitesinin favicon'u için istekleri işler.\n" -"Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya " -"çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek " -"için bir HTTP 404 hatası verilir." +"Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" "İsteği yönetici dizin sayfasına yönlendirir. Bu fonksiyon gelen HTTP " @@ -3102,7 +3093,7 @@ msgstr "" msgid "Returns current version of the eVibes. " msgstr "eVibes'in geçerli sürümünü döndürür." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3113,15 +3104,16 @@ msgstr "" "Evibes ile ilgili işlemleri yönetmek için bir görünüm kümesi tanımlar. " "EvibesViewSet sınıfı ModelViewSet'ten miras alınır ve Evibes varlıkları " "üzerindeki eylemleri ve işlemleri yönetmek için işlevsellik sağlar. Geçerli " -"eyleme dayalı dinamik serileştirici sınıfları, özelleştirilebilir izinler ve " -"işleme biçimleri için destek içerir." +"eyleme dayalı dinamik serileştirici sınıfları, özelleştirilebilir izinler ve" +" işleme biçimleri için destek içerir." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "AttributeGroup nesnelerini yönetmek için bir görünüm kümesini temsil eder. " "Filtreleme, serileştirme ve veri alma dahil olmak üzere AttributeGroup ile " @@ -3129,7 +3121,7 @@ msgstr "" "parçasıdır ve AttributeGroup verilerine yönelik istekleri ve yanıtları " "işlemek için standartlaştırılmış bir yol sağlar." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3145,13 +3137,13 @@ msgstr "" "bağlı olarak ayrıntılı ve basitleştirilmiş bilgilerin alınması gibi " "döndürülen veriler üzerinde dinamik kontrol sağlar." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "AttributeValue nesnelerini yönetmek için bir görünüm kümesi. Bu görünüm " "kümesi, AttributeValue nesnelerini listelemek, almak, oluşturmak, " @@ -3160,7 +3152,7 @@ msgstr "" "serileştiriciler kullanır. Filtreleme yetenekleri DjangoFilterBackend " "aracılığıyla sağlanır." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3175,7 +3167,7 @@ msgstr "" "kullanıcıların belirli verilere erişebilmesini sağlamak için izinleri de " "zorlar." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3187,7 +3179,7 @@ msgstr "" "sağlar. Brand nesneleri için API uç noktalarının uygulanmasını " "basitleştirmek için Django'nun ViewSet çerçevesini kullanır." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3198,14 +3190,14 @@ msgid "" "product." msgstr "" "Sistemdeki `Product` modeliyle ilgili işlemleri yönetir. Bu sınıf, " -"filtreleme, serileştirme ve belirli örnekler üzerindeki işlemler dahil olmak " -"üzere ürünleri yönetmek için bir görünüm kümesi sağlar. Ortak işlevselliği " -"kullanmak için `EvibesViewSet`ten genişletilir ve RESTful API işlemleri için " -"Django REST çerçevesi ile entegre olur. Ürün ayrıntılarını almak, izinleri " +"filtreleme, serileştirme ve belirli örnekler üzerindeki işlemler dahil olmak" +" üzere ürünleri yönetmek için bir görünüm kümesi sağlar. Ortak işlevselliği " +"kullanmak için `EvibesViewSet`ten genişletilir ve RESTful API işlemleri için" +" Django REST çerçevesi ile entegre olur. Ürün ayrıntılarını almak, izinleri " "uygulamak ve bir ürünün ilgili geri bildirimlerine erişmek için yöntemler " "içerir." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3220,61 +3212,61 @@ msgstr "" "tanımlar. Bu sınıfın amacı, Django REST çerçevesi aracılığıyla Vendor ile " "ilgili kaynaklara kolaylaştırılmış erişim sağlamaktır." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Geri Bildirim nesnelerini işleyen bir görünüm kümesinin temsili. Bu sınıf, " "listeleme, filtreleme ve ayrıntıları alma dahil olmak üzere Geri Bildirim " "nesneleriyle ilgili işlemleri yönetir. Bu görünüm kümesinin amacı, farklı " -"eylemler için farklı serileştiriciler sağlamak ve erişilebilir Geri Bildirim " -"nesnelerinin izin tabanlı kullanımını uygulamaktır. Temel `EvibesViewSet`i " +"eylemler için farklı serileştiriciler sağlamak ve erişilebilir Geri Bildirim" +" nesnelerinin izin tabanlı kullanımını uygulamaktır. Temel `EvibesViewSet`i " "genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " "kullanır." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" "Siparişleri ve ilgili işlemleri yönetmek için ViewSet. Bu sınıf, sipariş " "nesnelerini almak, değiştirmek ve yönetmek için işlevsellik sağlar. Ürün " "ekleme veya kaldırma, kayıtlı ve kayıtsız kullanıcılar için satın alma " -"işlemleri gerçekleştirme ve mevcut kimliği doğrulanmış kullanıcının bekleyen " -"siparişlerini alma gibi sipariş işlemlerini gerçekleştirmek için çeşitli uç " -"noktalar içerir. ViewSet, gerçekleştirilen belirli eyleme bağlı olarak " +"işlemleri gerçekleştirme ve mevcut kimliği doğrulanmış kullanıcının bekleyen" +" siparişlerini alma gibi sipariş işlemlerini gerçekleştirmek için çeşitli uç" +" noktalar içerir. ViewSet, gerçekleştirilen belirli eyleme bağlı olarak " "birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " "girerken izinleri buna göre zorlar." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "OrderProduct varlıklarını yönetmek için bir görünüm kümesi sağlar. Bu " "görünüm kümesi, CRUD işlemlerini ve OrderProduct modeline özgü özel " -"eylemleri etkinleştirir. Filtreleme, izin kontrolleri ve istenen eyleme göre " -"serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili " +"eylemleri etkinleştirir. Filtreleme, izin kontrolleri ve istenen eyleme göre" +" serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili " "geri bildirimleri işlemek için ayrıntılı bir eylem sağlar" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Uygulamadaki Ürün görselleri ile ilgili işlemleri yönetir." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3282,20 +3274,20 @@ msgstr "" "Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " "işlenmesini yönetir." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Promosyonları yönetmek için bir görünüm kümesini temsil eder." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Sistemdeki Stok verileri ile ilgili işlemleri yürütür." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3308,7 +3300,7 @@ msgstr "" "verilmediği sürece kullanıcıların yalnızca kendi istek listelerini " "yönetebilmelerini sağlamak için entegre edilmiştir." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3322,12 +3314,12 @@ msgstr "" "serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için " "özel davranışlar içerir." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Coğrafi kodlama hatası: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3336,7 +3328,7 @@ msgid "" "serializers based on the action being performed." msgstr "" "Uygulama içinde Ürün Etiketleri ile ilgili işlemleri gerçekleştirir. Bu " -"sınıf, Ürün Etiketi nesnelerinin alınması, filtrelenmesi ve serileştirilmesi " -"için işlevsellik sağlar. Belirtilen filtre arka ucunu kullanarak belirli " +"sınıf, Ürün Etiketi nesnelerinin alınması, filtrelenmesi ve serileştirilmesi" +" için işlevsellik sağlar. Belirtilen filtre arka ucunu kullanarak belirli " "nitelikler üzerinde esnek filtrelemeyi destekler ve gerçekleştirilen eyleme " "göre dinamik olarak farklı serileştiriciler kullanır." diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.mo b/engine/core/locale/vi_VN/LC_MESSAGES/django.mo index 880c4a5e7c8510ff691175fc50d23b0a5f285855..47c4ec97a058017db264bc0dbe8a386f527be1e0 100644 GIT binary patch delta 5461 zcmYk?)>p)^ZyAq_|c7my`DL==}4L=%@J7u<5oKtd664-GFEl2{rJ5tj96 z>a@`0hFQ}lmD<>omYQj0RGOt@Woct(R`dS+&V4fed7baM_ndR@_bm6vvJH)@H#FLM zCCH62#`NB0Ok13e@mPkpU>!!|ml%uJ*Bg`V7}FioiPyem%nsr&FpT)ocZ|6KcVGb4 zV;ekx9q=qR!@%9f^uu<$jq4k5G8J8^SczM)9(CjFJ;nrMDGtLY@W1#iYM?`V?Enq< zIuG(2s^eGwW6Vgrgg4{Rea58t8v8iM3;6h0t6fFH45l7mLS^VQ zw!j`Cj%kjAQByJj`{Q&RfX|~c`vWR77w}qiLLIY&@l9h2TD|2ML7d*kHps&u;sWf9 zOYwaks1{rCpbNts-!@#?!SSt`gP6p9rlaFqWZh5?@FcdzuP^~Gc}8_2|6QmUM?s6O z!t)i3CH@x2V^9Q{!C9WGu{-fg*ayEut@`Lldta&NKT(T!pJxL$CBA@RXgWKtZxx1j zwiQXJ8%E*%I2C8(=QtBHqa0I&uVFAIM?1cQYPjcOyovhfusznJw%-ZN#=02CG{WFm zo9VDv*YO=R1F2BMEYyK93pH02s41vH4fui=??z?hm{)(rvlUBT+bSN_J`I)nOwZ}4 z-Byg6itR21rSb%7JB7sAsmMePxC9$x4fexz*bKiwz2Q03eJ$c`s$)=Vr620PTvSFE zVka!~;^)2V?oJA=xUd&{;BnMyzcIn_9XN|n9W6s;rW)1ZHdJQbM7`l5)O}|>e?{$z zCS9zd7)Kn7IzPrE{kUct1vM;0J&23iM%AbkK8;HC7SuL6j5-OAp&sZY>H+>lrM`8d zW7=UfDq|U_`sH5zT2#hf#hV!49HyWF&UzP`b+r!?g(1}U^&E%lc#apZ_Iv?#4(!2E zcoenmVw3E4ychctZ^9{f67RwEZcG{Dn}1Qzo4oJ&)`FH}ide^IZ+ug9fH~U|6vWE(t$q{`V zvjAgJ2hax8XEp3rJ3ujNm#jb?wQr*`bP=;KsjuVv#Z!UWhR>jO$pO^%JAqn5jr-Xb zi*zZhrs6iwW4N4nMylNf7f^5hC*Fw>X?C}iqISt@RL4)@-S{@@0VDg{j7~;PT|R1x zmg7WRhbib@p)iO-a=PRD#Z!!T5wFL5^c!FoS0QSxlwmSHg~RYLDg)sI9rGMcLOocc z+w51cC2D(Tq24?PwKmGIm-c@(g-j|wM5QczkYjGg4Ak0q4E2C#a4;rj*zL6#HOKW{ z>^Inc^#-BZZ$Y*D9d+NpA&$8XAH=bEz!$UsB8S=zXQ3KwM|E%+wJ0-&+4ErxYAP0? zw%K~rV%?6DvB9gq^>%y0Wuj6)4s~$NLv80G48t19_~vB_-SH?Yb%Dbj-*385RO*sZ zt9T%iGE;%ua5w6W7G&C~cmow*e}`SHBd|U3WYqalf|`OgsDtfgboC?$DQFIVLd|Xb z2zx`e=MvP^tU>)ws7GzTbEpSyGtv$eg=#+peFI`3@fz%l&!PtY2DNC-DE7Z@j2LA* zz7->h^Kl$jp$7O4b;4ajr7&Q$WAZQ-`(ZWSfk#l=H8RUFbFmD&;3b@o(PL~z*P$L@ z%NW;z?|UKcZHBqp{X73@1)Ot%32VpWidR>*c5uah>OOuYM1z-v;b} zXE7WD-EsCw5>RtD8nx)wq6T>0^EJ=?sMLRfdV{9pZAXcy`$wYMXQMJX2Q}d1Uj6H+ zMgAU!quX+V-BwAcZBdLdcmy?&xzjP_5Qj?T4%GEisDYYKv{TX!wTAj&Ar_&g;tZzZ zphV$ct+|Kk)n+b#8=Au|K8qP#>?yu^2bueb`~D zW9HymT!evl*%z+BB;WU+LL3(wPqTBEjQTy0foYhJO4(-Afpih49)ZnRD+F}fv0dZ#^*X_8a{xz_zm{P z;rH01b_M1W??+wlmB&9AxB+Ki`x(}UaRTu#=<34AnfAgPo>BSs=W-S5`X$f1XW96G zXU_sV&?YS5zNUrNmAH&J@LoF=k9xM8&4AQbqNb?%9QMBotLE5>rgN<;Jg=K)<8sey z=Gy_5VixWE7uXDp$3)_4)Z%&>|fp!0EUdCoHye+vI-7OeG$MUGYWK3Hc?eUC&~>sODh;@n+N-YQWnue2HD8 z1*mPk1@)rtaSA#pg2{v$^g|t`rKtUT2>WA~65H`y)Z*EQI&l6#-#JifcTYRikJCg{ zMkZi5u0nkawxGVEZzAW7YrdwS4*D#$zl4ThTjJxWlwHOm412(S1s}&A#Gj+i{#Ipn zpe$6o3e-T)Vk+)Lef54peVke^v-c0fzFLkY6tcOn3pH1r%I%vapgzB87>^@RAE6Rd zht;S7cc32V5Nax~f6xw`j%r_qYw%Ijffcvh-d~Kjfepxs1*JK zb$u@mz|T>0-(iJ4kQQSe@d4Car#xh*tQ>Vi=i*S}2F$6a5VO+$fH;eq zyOdS--|o9m4{{i1V&Eh8=v;(Klu~gIK@@7qI>)C zRj-W>^>h8I_D0vXC?VEgpy!gh(wHg!y6Hq*t>03=s#WpjM0KqbKK1u2^{YGI^$ADu zs&1QCRJEwTvFh@!ZcP@?&6zhZuON4BRsUU`ulp+~+!gWn;HIGLocz26IdgKd&D9of x@9J0=U;oGlH76^b;F>*^PU_X}YTkLo8S+;bH9?h5%+)Bp(n-7;Evj_7{vRP6H5dQ@ delta 5423 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 diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.po b/engine/core/locale/vi_VN/LC_MESSAGES/django.po index f0188304..8da3e98b 100644 --- a/engine/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/core/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -29,7 +29,8 @@ msgstr "Đang hoạt động" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "" "Nếu được đặt thành false, đối tượng này sẽ không hiển thị cho người dùng " "không có quyền truy cập cần thiết." @@ -50,89 +51,89 @@ msgstr "Đã sửa đổi" msgid "when the object was last modified" msgstr "Khi đối tượng được chỉnh sửa lần cuối" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "Dịch thuật" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "Tổng quát" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "Quan hệ" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "Thông tin bổ sung" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "Siêu dữ liệu" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "Dấu thời gian" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Kích hoạt %(verbose_name_plural)s đã chọn" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "Các mục đã được chọn đã được kích hoạt!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Vô hiệu hóa các mục đã chọn %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "Các mục đã chọn đã bị vô hiệu hóa!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "Giá trị thuộc tính" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "Giá trị thuộc tính" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "Hình ảnh" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Hình ảnh" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "Cổ phiếu" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Cổ phiếu" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "Đặt hàng sản phẩm" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "Đặt hàng sản phẩm" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "Trẻ em" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "Cấu hình" @@ -156,7 +157,8 @@ msgstr "Đã giao" msgid "canceled" msgstr "Đã hủy" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Thất bại" @@ -198,7 +200,7 @@ msgstr "" "nội dung. Ngôn ngữ có thể được chọn bằng cả tiêu đề Accept-Language và tham " "số truy vấn." -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Bộ nhớ đệm I/O" @@ -222,7 +224,7 @@ msgstr "Lấy các tham số có thể truy cập của ứng dụng" msgid "send a message to the support team" msgstr "Gửi tin nhắn cho đội ngũ hỗ trợ" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "Yêu cầu URL CORSed. Chỉ cho phép https." @@ -243,8 +245,8 @@ msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -"Mua hàng với tư cách là doanh nghiệp, sử dụng các sản phẩm được cung cấp với " -"`product_uuid` và `attributes`." +"Mua hàng với tư cách là doanh nghiệp, sử dụng các sản phẩm được cung cấp với" +" `product_uuid` và `attributes`." #: engine/core/docs/drf/views.py:164 msgid "download a digital asset from purchased digital order" @@ -273,7 +275,8 @@ msgstr "" "chỉnh sửa." #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Cập nhật một số trường trong nhóm thuộc tính hiện có, giữ nguyên các trường " "không thể chỉnh sửa." @@ -328,10 +331,11 @@ msgstr "" "không thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "" -"Cập nhật một số trường của giá trị thuộc tính hiện có, giữ nguyên các trường " -"không thể chỉnh sửa." +"Cập nhật một số trường của giá trị thuộc tính hiện có, giữ nguyên các trường" +" không thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 msgid "list all categories (simple view)" @@ -362,14 +366,14 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -389,12 +393,12 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" "Tìm kiếm chuỗi con không phân biệt chữ hoa chữ thường trên các trường " -"human_readable_id, order_products.product.name và order_products.product." -"partnumber." +"human_readable_id, order_products.product.name và " +"order_products.product.partnumber." #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -430,9 +434,9 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" "Sắp xếp theo một trong các trường sau: uuid, human_readable_id, user_email, " "user, status, created, modified, buy_time, random. Thêm tiền tố '-' để sắp " @@ -467,8 +471,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:373 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:380 msgid "purchase an order" @@ -492,7 +496,7 @@ msgstr "Lấy đơn hàng đang chờ xử lý hiện tại của người dùng msgid "retrieves a current pending order of an authenticated user" msgstr "Lấy lệnh đặt hàng đang chờ xử lý hiện tại của người dùng đã xác thực." -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "Đặt hàng mà không cần tạo tài khoản" @@ -639,29 +643,15 @@ msgstr "" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" -"Lọc theo một hoặc nhiều cặp tên/giá trị thuộc tính. • **Cú pháp**: " -"`attr_name=method-value[;attr2=method2-value2]…` • **Phương thức** (mặc định " -"là `icontains` nếu không được chỉ định): `iexact`, `exact`, `icontains`, " -"`contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, " -"`regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **Kiểu giá trị**: JSON " -"được ưu tiên (nên bạn có thể truyền danh sách/đối tượng), `true`/`false` cho " -"boolean, số nguyên, số thực; nếu không sẽ được xử lý như chuỗi. • " -"**Base64**: thêm tiền tố `b64-` để mã hóa Base64 an toàn cho URL giá trị " -"thô. \n" -"Ví dụ: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" +"Lọc theo một hoặc nhiều cặp tên/giá trị thuộc tính. • **Cú pháp**: `attr_name=method-value[;attr2=method2-value2]…` • **Phương thức** (mặc định là `icontains` nếu không được chỉ định): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **Kiểu giá trị**: JSON được ưu tiên (nên bạn có thể truyền danh sách/đối tượng), `true`/`false` cho boolean, số nguyên, số thực; nếu không sẽ được xử lý như chuỗi. • **Base64**: thêm tiền tố `b64-` để mã hóa Base64 an toàn cho URL giá trị thô. \n" +"Ví dụ: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" #: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 msgid "list all products (simple view)" @@ -673,13 +663,12 @@ msgstr "(chính xác) Mã định danh duy nhất của sản phẩm (UUID)" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -"Danh sách các trường được phân tách bằng dấu phẩy để sắp xếp. Thêm tiền tố `-" -"` để sắp xếp theo thứ tự giảm dần. **Được phép:** uuid, rating, name, slug, " -"created, modified, price, random" +"Danh sách các trường được phân tách bằng dấu phẩy để sắp xếp. Thêm tiền tố " +"`-` để sắp xếp theo thứ tự giảm dần. **Được phép:** uuid, rating, name, " +"slug, created, modified, price, random" #: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 msgid "retrieve a single product (detailed view)" @@ -692,6 +681,9 @@ msgid "Product UUID or slug" msgstr "Mã định danh duy nhất (UUID) hoặc Slug của sản phẩm" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "Tạo sản phẩm" @@ -704,8 +696,8 @@ msgstr "" msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -"Cập nhật một số trường của sản phẩm hiện có, giữ nguyên các trường không thể " -"chỉnh sửa." +"Cập nhật một số trường của sản phẩm hiện có, giữ nguyên các trường không thể" +" chỉnh sửa." #: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 msgid "delete a product" @@ -779,8 +771,8 @@ msgstr "Viết lại phản hồi hiện có để lưu các trường không th #: engine/core/docs/drf/viewsets.py:851 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -"Cập nhật một số trường của một phản hồi hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một phản hồi hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:861 msgid "list all order–product relations (simple view)" @@ -844,8 +836,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:981 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:1006 msgid "list all vendors (simple view)" @@ -872,8 +864,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1041 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:1051 msgid "list all product images (simple view)" @@ -900,8 +892,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1086 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:1096 msgid "list all promo codes (simple view)" @@ -928,8 +920,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1131 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:1141 msgid "list all promotions (simple view)" @@ -956,8 +948,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1176 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:1186 msgid "list all stocks (simple view)" @@ -984,8 +976,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1221 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/docs/drf/viewsets.py:1231 msgid "list all product tags (simple view)" @@ -1012,8 +1004,8 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:1266 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" -"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không " -"thể chỉnh sửa." +"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" +" thể chỉnh sửa." #: engine/core/elasticsearch/__init__.py:122 #: engine/core/elasticsearch/__init__.py:570 @@ -1143,253 +1135,256 @@ msgstr "Cấp độ" msgid "Product UUID" msgstr "Mã định danh duy nhất của sản phẩm (UUID)" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "Khóa để tìm kiếm trong hoặc đặt vào bộ nhớ đệm" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "Dữ liệu cần lưu trữ trong bộ nhớ cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "Thời gian chờ (timeout) tính bằng giây để lưu dữ liệu vào bộ nhớ đệm." -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "Dữ liệu được lưu trữ trong bộ nhớ đệm" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "" "Dữ liệu JSON đã được chuyển đổi sang định dạng JSON từ URL được yêu cầu." -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "Chỉ các URL bắt đầu bằng http(s):// mới được phép." -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "Thêm sản phẩm vào đơn hàng" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Lệnh {order_uuid} không tìm thấy!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "Xóa tất cả sản phẩm khỏi đơn hàng." -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "Đặt hàng" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vui lòng cung cấp một trong hai trường order_uuid hoặc order_hr_id - hai " "trường này là tương hỗ!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}" +msgstr "" +"Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "Thực hiện một hành động trên danh sách sản phẩm theo thứ tự." -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "Xóa/Thêm" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "Hành động phải là \"thêm\" hoặc \"xóa\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "" "Thực hiện một hành động trên danh sách sản phẩm trong danh sách mong muốn." -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "Vui lòng cung cấp giá trị `wishlist_uuid`." -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Danh sách mong muốn {wishlist_uuid} không tìm thấy!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "Thêm sản phẩm vào đơn hàng" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "Đặt hàng" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "" "Vui lòng gửi các thuộc tính dưới dạng chuỗi được định dạng như sau: " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "Thêm hoặc xóa phản hồi cho sản phẩm đặt hàng" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "Hành động phải là `thêm` hoặc `xóa`!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Sản phẩm {order_product_uuid} không tìm thấy!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "Dòng địa chỉ gốc do người dùng cung cấp" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "Giới hạn phải nằm trong khoảng từ 1 đến 10." -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - hoạt động rất tốt." -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "Thuộc tính" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Các thuộc tính được nhóm lại" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Nhóm thuộc tính" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "Các danh mục" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "Thương hiệu" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Các danh mục" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Tỷ lệ phần trăm đánh dấu" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." -msgstr "Các thuộc tính và giá trị nào có thể được sử dụng để lọc danh mục này." +msgstr "" +"Các thuộc tính và giá trị nào có thể được sử dụng để lọc danh mục này." -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "" "Giá tối thiểu và tối đa cho các sản phẩm trong danh mục này, nếu có sẵn." -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Thẻ cho danh mục này" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Sản phẩm trong danh mục này" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Nhà cung cấp" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Vĩ độ (tọa độ Y)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Kinh độ (tọa độ X)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Làm thế nào" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Giá trị đánh giá từ 1 đến 10, bao gồm cả 1 và 10, hoặc 0 nếu không được " "thiết lập." -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Đại diện cho phản hồi từ người dùng." -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "Thông báo" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Tải xuống liên kết URL cho sản phẩm của đơn hàng này (nếu có)." -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "Phản hồi" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Danh sách các sản phẩm trong đơn hàng này" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "Địa chỉ thanh toán" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1397,54 +1392,54 @@ msgstr "" "Địa chỉ giao hàng cho đơn hàng này, để trống nếu trùng với địa chỉ thanh " "toán hoặc nếu không áp dụng." -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Tổng giá trị của đơn hàng này" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Tổng số lượng sản phẩm trong đơn hàng" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" "Tất cả các sản phẩm trong đơn hàng có phải là sản phẩm kỹ thuật số không?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Giao dịch cho đơn hàng này" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "Đơn hàng" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL hình ảnh" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Hình ảnh sản phẩm" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "Thể loại" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "Phản hồi" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "Thương hiệu" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Nhóm thuộc tính" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1452,7 +1447,7 @@ msgstr "Nhóm thuộc tính" msgid "price" msgstr "Giá" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1460,39 +1455,39 @@ msgstr "Giá" msgid "quantity" msgstr "Số lượng" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Số lượng phản hồi" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Sản phẩm chỉ dành cho đơn đặt hàng cá nhân." -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "Giá khuyến mãi" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "Sản phẩm" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Mã khuyến mãi" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Sản phẩm đang khuyến mãi" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "Khuyến mãi" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Nhà cung cấp" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1500,99 +1495,99 @@ msgstr "Nhà cung cấp" msgid "product" msgstr "Sản phẩm" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "Sản phẩm đã thêm vào danh sách mong muốn" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "Danh sách mong muốn" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Sản phẩm được gắn thẻ" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "Thẻ sản phẩm" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Các danh mục được gắn thẻ" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Thẻ của các danh mục" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Tên dự án" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "Tên công ty" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "Địa chỉ công ty" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "Số điện thoại của công ty" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', đôi khi phải sử dụng thay cho giá trị người dùng máy chủ." -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "Người dùng máy chủ email" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "Số tiền tối đa cho thanh toán" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "Số tiền tối thiểu để thanh toán" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "Dữ liệu phân tích" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "Dữ liệu quảng cáo" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "Cấu hình" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "Mã ngôn ngữ" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "Tên ngôn ngữ" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "Cờ ngôn ngữ, nếu có :)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "Xem danh sách các ngôn ngữ được hỗ trợ" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Kết quả tìm kiếm sản phẩm" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "Kết quả tìm kiếm sản phẩm" @@ -1605,9 +1600,9 @@ msgid "" msgstr "" "Đại diện cho một nhóm các thuộc tính, có thể có cấu trúc phân cấp. Lớp này " "được sử dụng để quản lý và tổ chức các nhóm thuộc tính. Một nhóm thuộc tính " -"có thể có nhóm cha, tạo thành cấu trúc phân cấp. Điều này có thể hữu ích cho " -"việc phân loại và quản lý các thuộc tính một cách hiệu quả hơn trong một hệ " -"thống phức tạp." +"có thể có nhóm cha, tạo thành cấu trúc phân cấp. Điều này có thể hữu ích cho" +" việc phân loại và quản lý các thuộc tính một cách hiệu quả hơn trong một hệ" +" thống phức tạp." #: engine/core/models.py:91 msgid "parent of this group" @@ -1640,8 +1635,8 @@ msgstr "" "dụng để định nghĩa và quản lý thông tin liên quan đến một nhà cung cấp bên " "ngoài. Nó lưu trữ tên của nhà cung cấp, thông tin xác thực cần thiết cho " "việc giao tiếp và tỷ lệ phần trăm chênh lệch giá áp dụng cho các sản phẩm " -"được lấy từ nhà cung cấp. Mô hình này cũng duy trì các metadata và ràng buộc " -"bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các " +"được lấy từ nhà cung cấp. Mô hình này cũng duy trì các metadata và ràng buộc" +" bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các " "nhà cung cấp bên thứ ba." #: engine/core/models.py:124 @@ -1695,11 +1690,11 @@ msgid "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." msgstr "" -"Đại diện cho thẻ sản phẩm được sử dụng để phân loại hoặc nhận dạng sản phẩm. " -"Lớp ProductTag được thiết kế để nhận dạng và phân loại sản phẩm một cách duy " -"nhất thông qua sự kết hợp giữa mã định danh thẻ nội bộ và tên hiển thị thân " -"thiện với người dùng. Nó hỗ trợ các thao tác được xuất qua mixins và cung " -"cấp tùy chỉnh metadata cho mục đích quản trị." +"Đại diện cho thẻ sản phẩm được sử dụng để phân loại hoặc nhận dạng sản phẩm." +" Lớp ProductTag được thiết kế để nhận dạng và phân loại sản phẩm một cách " +"duy nhất thông qua sự kết hợp giữa mã định danh thẻ nội bộ và tên hiển thị " +"thân thiện với người dùng. Nó hỗ trợ các thao tác được xuất qua mixins và " +"cung cấp tùy chỉnh metadata cho mục đích quản trị." #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1727,8 +1722,8 @@ msgid "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -"Đại diện cho thẻ danh mục được sử dụng cho sản phẩm. Lớp này mô hình hóa một " -"thẻ danh mục có thể được sử dụng để liên kết và phân loại sản phẩm. Nó bao " +"Đại diện cho thẻ danh mục được sử dụng cho sản phẩm. Lớp này mô hình hóa một" +" thẻ danh mục có thể được sử dụng để liên kết và phân loại sản phẩm. Nó bao " "gồm các thuộc tính cho mã định danh thẻ nội bộ và tên hiển thị thân thiện " "với người dùng." @@ -1752,13 +1747,13 @@ msgid "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." msgstr "" -"Đại diện cho một thực thể danh mục để tổ chức và nhóm các mục liên quan theo " -"cấu trúc phân cấp. Các danh mục có thể có mối quan hệ phân cấp với các danh " -"mục khác, hỗ trợ mối quan hệ cha-con. Lớp này bao gồm các trường cho " +"Đại diện cho một thực thể danh mục để tổ chức và nhóm các mục liên quan theo" +" cấu trúc phân cấp. Các danh mục có thể có mối quan hệ phân cấp với các danh" +" mục khác, hỗ trợ mối quan hệ cha-con. Lớp này bao gồm các trường cho " "metadata và biểu diễn trực quan, làm nền tảng cho các tính năng liên quan " "đến danh mục. Lớp này thường được sử dụng để định nghĩa và quản lý các danh " -"mục sản phẩm hoặc các nhóm tương tự khác trong ứng dụng, cho phép người dùng " -"hoặc quản trị viên xác định tên, mô tả và cấu trúc phân cấp của các danh " +"mục sản phẩm hoặc các nhóm tương tự khác trong ứng dụng, cho phép người dùng" +" hoặc quản trị viên xác định tên, mô tả và cấu trúc phân cấp của các danh " "mục, cũng như gán các thuộc tính như hình ảnh, thẻ hoặc ưu tiên." #: engine/core/models.py:274 @@ -1811,10 +1806,11 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"Đại diện cho một đối tượng Thương hiệu trong hệ thống. Lớp này quản lý thông " -"tin và thuộc tính liên quan đến một thương hiệu, bao gồm tên, logo, mô tả, " +"Đại diện cho một đối tượng Thương hiệu trong hệ thống. Lớp này quản lý thông" +" tin và thuộc tính liên quan đến một thương hiệu, bao gồm tên, logo, mô tả, " "các danh mục liên quan, một slug duy nhất và thứ tự ưu tiên. Nó cho phép tổ " "chức và hiển thị dữ liệu liên quan đến thương hiệu trong ứng dụng." @@ -1860,8 +1856,8 @@ msgstr "Các danh mục" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " @@ -1951,14 +1947,14 @@ msgid "" "product data and its associated information within an application." msgstr "" "Đại diện cho một sản phẩm có các thuộc tính như danh mục, thương hiệu, thẻ, " -"trạng thái kỹ thuật số, tên, mô tả, số phần và slug. Cung cấp các thuộc tính " -"tiện ích liên quan để truy xuất đánh giá, số lượng phản hồi, giá, số lượng " +"trạng thái kỹ thuật số, tên, mô tả, số phần và slug. Cung cấp các thuộc tính" +" tiện ích liên quan để truy xuất đánh giá, số lượng phản hồi, giá, số lượng " "và tổng số đơn hàng. Được thiết kế để sử dụng trong hệ thống quản lý thương " "mại điện tử hoặc quản lý kho hàng. Lớp này tương tác với các mô hình liên " "quan (như Danh mục, Thương hiệu và Thẻ Sản phẩm) và quản lý bộ nhớ đệm cho " -"các thuộc tính được truy cập thường xuyên để cải thiện hiệu suất. Nó được sử " -"dụng để định nghĩa và thao tác dữ liệu sản phẩm và thông tin liên quan trong " -"ứng dụng." +"các thuộc tính được truy cập thường xuyên để cải thiện hiệu suất. Nó được sử" +" dụng để định nghĩa và thao tác dữ liệu sản phẩm và thông tin liên quan " +"trong ứng dụng." #: engine/core/models.py:585 msgid "category this product belongs to" @@ -2014,16 +2010,16 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" "Đại diện cho một thuộc tính trong hệ thống. Lớp này được sử dụng để định " -"nghĩa và quản lý các thuộc tính, là các phần dữ liệu có thể tùy chỉnh có thể " -"được liên kết với các thực thể khác. Các thuộc tính có các danh mục, nhóm, " +"nghĩa và quản lý các thuộc tính, là các phần dữ liệu có thể tùy chỉnh có thể" +" được liên kết với các thực thể khác. Các thuộc tính có các danh mục, nhóm, " "loại giá trị và tên liên quan. Mô hình hỗ trợ nhiều loại giá trị, bao gồm " -"chuỗi, số nguyên, số thực, boolean, mảng và đối tượng. Điều này cho phép cấu " -"trúc dữ liệu động và linh hoạt." +"chuỗi, số nguyên, số thực, boolean, mảng và đối tượng. Điều này cho phép cấu" +" trúc dữ liệu động và linh hoạt." #: engine/core/models.py:733 msgid "group of this attribute" @@ -2084,13 +2080,13 @@ msgstr "Thuộc tính" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." msgstr "" -"Đại diện cho một giá trị cụ thể của một thuộc tính được liên kết với một sản " -"phẩm. Nó liên kết 'thuộc tính' với một 'giá trị' duy nhất, cho phép tổ chức " -"tốt hơn và thể hiện động các đặc điểm của sản phẩm." +"Đại diện cho một giá trị cụ thể của một thuộc tính được liên kết với một sản" +" phẩm. Nó liên kết 'thuộc tính' với một 'giá trị' duy nhất, cho phép tổ chức" +" tốt hơn và thể hiện động các đặc điểm của sản phẩm." #: engine/core/models.py:788 msgid "attribute of this value" @@ -2107,8 +2103,8 @@ msgstr "Giá trị cụ thể cho thuộc tính này" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" @@ -2156,11 +2152,11 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"Đại diện cho một chiến dịch khuyến mãi cho các sản phẩm có giảm giá. Lớp này " -"được sử dụng để định nghĩa và quản lý các chiến dịch khuyến mãi cung cấp " +"Đại diện cho một chiến dịch khuyến mãi cho các sản phẩm có giảm giá. Lớp này" +" được sử dụng để định nghĩa và quản lý các chiến dịch khuyến mãi cung cấp " "giảm giá theo tỷ lệ phần trăm cho các sản phẩm. Lớp này bao gồm các thuộc " "tính để thiết lập tỷ lệ giảm giá, cung cấp chi tiết về chương trình khuyến " "mãi và liên kết nó với các sản phẩm áp dụng. Nó tích hợp với danh mục sản " @@ -2206,9 +2202,9 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" "Đại diện cho danh sách mong muốn của người dùng để lưu trữ và quản lý các " -"sản phẩm mong muốn. Lớp này cung cấp các chức năng để quản lý bộ sưu tập sản " -"phẩm, hỗ trợ các thao tác như thêm và xóa sản phẩm, cũng như hỗ trợ các thao " -"tác thêm và xóa nhiều sản phẩm cùng lúc." +"sản phẩm mong muốn. Lớp này cung cấp các chức năng để quản lý bộ sưu tập sản" +" phẩm, hỗ trợ các thao tác như thêm và xóa sản phẩm, cũng như hỗ trợ các " +"thao tác thêm và xóa nhiều sản phẩm cùng lúc." #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2232,15 +2228,15 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" "Đại diện cho một bản ghi tài liệu liên quan đến một sản phẩm. Lớp này được " "sử dụng để lưu trữ thông tin về các tài liệu liên quan đến các sản phẩm cụ " -"thể, bao gồm việc tải lên tệp và metadata của chúng. Nó chứa các phương thức " -"và thuộc tính để xử lý loại tệp và đường dẫn lưu trữ cho các tệp tài liệu. " -"Nó mở rộng chức năng từ các mixin cụ thể và cung cấp các tính năng tùy chỉnh " -"bổ sung." +"thể, bao gồm việc tải lên tệp và metadata của chúng. Nó chứa các phương thức" +" và thuộc tính để xử lý loại tệp và đường dẫn lưu trữ cho các tệp tài liệu. " +"Nó mở rộng chức năng từ các mixin cụ thể và cung cấp các tính năng tùy chỉnh" +" bổ sung." #: engine/core/models.py:998 msgid "documentary" @@ -2256,14 +2252,14 @@ msgstr "Chưa được giải quyết" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" "Đại diện cho một thực thể địa chỉ bao gồm thông tin vị trí và mối quan hệ " "với người dùng. Cung cấp chức năng lưu trữ dữ liệu địa lý và địa chỉ, cũng " @@ -2335,12 +2331,12 @@ msgid "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." msgstr "" -"Đại diện cho một mã khuyến mãi có thể được sử dụng để giảm giá, quản lý thời " -"hạn hiệu lực, loại giảm giá và cách áp dụng. Lớp PromoCode lưu trữ thông tin " -"chi tiết về mã khuyến mãi, bao gồm mã định danh duy nhất, thuộc tính giảm " -"giá (số tiền hoặc phần trăm), thời hạn hiệu lực, người dùng liên kết (nếu " -"có) và trạng thái sử dụng. Nó bao gồm chức năng để xác thực và áp dụng mã " -"khuyến mãi vào đơn hàng đồng thời đảm bảo các điều kiện được đáp ứng." +"Đại diện cho một mã khuyến mãi có thể được sử dụng để giảm giá, quản lý thời" +" hạn hiệu lực, loại giảm giá và cách áp dụng. Lớp PromoCode lưu trữ thông " +"tin chi tiết về mã khuyến mãi, bao gồm mã định danh duy nhất, thuộc tính " +"giảm giá (số tiền hoặc phần trăm), thời hạn hiệu lực, người dùng liên kết " +"(nếu có) và trạng thái sử dụng. Nó bao gồm chức năng để xác thực và áp dụng " +"mã khuyến mãi vào đơn hàng đồng thời đảm bảo các điều kiện được đáp ứng." #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" @@ -2428,15 +2424,15 @@ msgstr "Loại giảm giá không hợp lệ cho mã khuyến mãi {self.uuid}!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" "Đại diện cho một đơn hàng được đặt bởi người dùng. Lớp này mô hình hóa một " "đơn hàng trong ứng dụng, bao gồm các thuộc tính khác nhau như thông tin " -"thanh toán và vận chuyển, trạng thái, người dùng liên quan, thông báo và các " -"thao tác liên quan. Đơn hàng có thể có các sản phẩm liên quan, áp dụng " +"thanh toán và vận chuyển, trạng thái, người dùng liên quan, thông báo và các" +" thao tác liên quan. Đơn hàng có thể có các sản phẩm liên quan, áp dụng " "khuyến mãi, thiết lập địa chỉ và cập nhật chi tiết vận chuyển hoặc thanh " "toán. Đồng thời, chức năng hỗ trợ quản lý các sản phẩm trong chu kỳ đời của " "đơn hàng." @@ -2530,8 +2526,8 @@ msgstr "Bạn không thể thêm nhiều sản phẩm hơn số lượng hiện #: engine/core/models.py:1428 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -"Bạn không thể xóa sản phẩm khỏi một đơn hàng không phải là đơn hàng đang chờ " -"xử lý." +"Bạn không thể xóa sản phẩm khỏi một đơn hàng không phải là đơn hàng đang chờ" +" xử lý." #: engine/core/models.py:1416 #, python-brace-format @@ -2601,11 +2597,11 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" "Quản lý phản hồi của người dùng về sản phẩm. Lớp này được thiết kế để thu " -"thập và lưu trữ phản hồi của người dùng về các sản phẩm cụ thể mà họ đã mua. " -"Nó bao gồm các thuộc tính để lưu trữ bình luận của người dùng, tham chiếu " -"đến sản phẩm liên quan trong đơn hàng và đánh giá do người dùng gán. Lớp này " -"sử dụng các trường cơ sở dữ liệu để mô hình hóa và quản lý dữ liệu phản hồi " -"một cách hiệu quả." +"thập và lưu trữ phản hồi của người dùng về các sản phẩm cụ thể mà họ đã mua." +" Nó bao gồm các thuộc tính để lưu trữ bình luận của người dùng, tham chiếu " +"đến sản phẩm liên quan trong đơn hàng và đánh giá do người dùng gán. Lớp này" +" sử dụng các trường cơ sở dữ liệu để mô hình hóa và quản lý dữ liệu phản hồi" +" một cách hiệu quả." #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2617,7 +2613,8 @@ msgid "feedback comments" msgstr "Phản hồi" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "" "Tham chiếu đến sản phẩm cụ thể trong đơn hàng mà phản hồi này đề cập đến." @@ -2761,16 +2758,16 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" "Đại diện cho chức năng tải xuống các tài sản kỹ thuật số liên quan đến đơn " -"hàng. Lớp DigitalAssetDownload cung cấp khả năng quản lý và truy cập các tệp " -"tải xuống liên quan đến sản phẩm trong đơn hàng. Nó lưu trữ thông tin về sản " -"phẩm trong đơn hàng liên quan, số lần tải xuống và liệu tài sản có hiển thị " -"công khai hay không. Nó bao gồm một phương thức để tạo URL tải xuống tài sản " -"khi đơn hàng liên quan ở trạng thái đã hoàn thành." +"hàng. Lớp DigitalAssetDownload cung cấp khả năng quản lý và truy cập các tệp" +" tải xuống liên quan đến sản phẩm trong đơn hàng. Nó lưu trữ thông tin về " +"sản phẩm trong đơn hàng liên quan, số lần tải xuống và liệu tài sản có hiển " +"thị công khai hay không. Nó bao gồm một phương thức để tạo URL tải xuống tài" +" sản khi đơn hàng liên quan ở trạng thái đã hoàn thành." #: engine/core/models.py:1961 msgid "download" @@ -2828,8 +2825,7 @@ msgstr "Xin chào %(order.user.first_name)s," #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" msgstr "" "Cảm ơn quý khách đã đặt hàng #%(order.pk)s! Chúng tôi vui mừng thông báo " @@ -2858,8 +2854,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "" -"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng " -"tôi tại %(config.EMAIL_HOST_USER)s." +"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng" +" tôi tại %(config.EMAIL_HOST_USER)s." #: engine/core/templates/digital_order_created_email.html:133 #, python-format @@ -2909,8 +2905,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng " -"tôi tại %(contact_email)s." +"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng" +" tôi tại %(contact_email)s." #: engine/core/templates/digital_order_delivered_email.html:165 #: engine/core/templates/promocode_granted_email.html:108 @@ -2936,14 +2932,13 @@ msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "" -"Cảm ơn quý khách đã đồng hành cùng chúng tôi! Chúng tôi đã cấp cho quý khách " -"một mã khuyến mãi cho" +"Cảm ơn quý khách đã đồng hành cùng chúng tôi! Chúng tôi đã cấp cho quý khách" +" một mã khuyến mãi cho" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "" "Cảm ơn quý khách đã đặt hàng! Chúng tôi rất vui được xác nhận đơn hàng của " @@ -2984,23 +2979,23 @@ msgstr "" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Liên hệ với chúng tôi đã được khởi tạo" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | Liên hệ với chúng tôi đã được khởi tạo" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Xác nhận đơn hàng" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | Xác nhận đơn hàng" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Đơn hàng đã được giao" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | Đơn hàng đã được giao" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | mã khuyến mãi được cấp" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | mã khuyến mãi được cấp" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -3069,20 +3064,18 @@ msgstr "Xử lý các truy vấn tìm kiếm toàn cầu." #: engine/core/views.py:277 msgid "Handles the logic of buying as a business without registration." msgstr "" -"Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng " -"ký." +"Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng" +" ký." #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "Xử lý việc tải xuống tài sản kỹ thuật số liên quan đến một đơn hàng. Chức " -"năng này cố gắng cung cấp tệp tài sản kỹ thuật số được lưu trữ trong thư mục " -"lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được trả " -"về để thông báo rằng tài nguyên không khả dụng." +"năng này cố gắng cung cấp tệp tài sản kỹ thuật số được lưu trữ trong thư mục" +" lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được " +"trả về để thông báo rằng tài nguyên không khả dụng." #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -3098,7 +3091,8 @@ msgstr "Bạn chỉ có thể tải xuống tài sản kỹ thuật số một l #: engine/core/views.py:338 msgid "the order must be paid before downloading the digital asset" -msgstr "Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số." +msgstr "" +"Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số." #: engine/core/views.py:344 msgid "the order product does not have a product" @@ -3111,30 +3105,29 @@ msgstr "Biểu tượng trang web không tìm thấy" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" -"Xử lý yêu cầu về biểu tượng favicon của một trang web. Chức năng này cố gắng " -"cung cấp tệp favicon nằm trong thư mục tĩnh của dự án. Nếu tệp favicon không " -"được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài nguyên " -"không khả dụng." +"Xử lý yêu cầu về biểu tượng favicon của một trang web. Chức năng này cố gắng" +" cung cấp tệp favicon nằm trong thư mục tĩnh của dự án. Nếu tệp favicon " +"không được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài " +"nguyên không khả dụng." #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"Chuyển hướng yêu cầu đến trang chỉ mục quản trị. Chức năng này xử lý các yêu " -"cầu HTTP đến và chuyển hướng chúng đến trang chỉ mục giao diện quản trị " -"Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng HTTP." +"Chuyển hướng yêu cầu đến trang chỉ mục quản trị. Chức năng này xử lý các yêu" +" cầu HTTP đến và chuyển hướng chúng đến trang chỉ mục giao diện quản trị " +"Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng " +"HTTP." #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "Trả về phiên bản hiện tại của eVibes." -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3148,20 +3141,21 @@ msgstr "" "trợ cho các lớp serializer động dựa trên hành động hiện tại, quyền truy cập " "có thể tùy chỉnh và các định dạng hiển thị." -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" "Đại diện cho một tập hợp các đối tượng để quản lý các đối tượng " "AttributeGroup. Xử lý các thao tác liên quan đến AttributeGroup, bao gồm " -"lọc, serialization và truy xuất dữ liệu. Lớp này là một phần của lớp API của " -"ứng dụng và cung cấp một cách chuẩn hóa để xử lý yêu cầu và phản hồi cho dữ " -"liệu AttributeGroup." +"lọc, serialization và truy xuất dữ liệu. Lớp này là một phần của lớp API của" +" ứng dụng và cung cấp một cách chuẩn hóa để xử lý yêu cầu và phản hồi cho dữ" +" liệu AttributeGroup." -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3173,17 +3167,17 @@ msgstr "" "Quản lý các thao tác liên quan đến các đối tượng thuộc tính (Attribute) " "trong ứng dụng. Cung cấp một bộ các điểm cuối API để tương tác với dữ liệu " "thuộc tính. Lớp này quản lý việc truy vấn, lọc và serialization của các đối " -"tượng thuộc tính, cho phép kiểm soát động đối với dữ liệu được trả về, chẳng " -"hạn như lọc theo các trường cụ thể hoặc lấy thông tin chi tiết so với thông " -"tin đơn giản tùy thuộc vào yêu cầu." +"tượng thuộc tính, cho phép kiểm soát động đối với dữ liệu được trả về, chẳng" +" hạn như lọc theo các trường cụ thể hoặc lấy thông tin chi tiết so với thông" +" tin đơn giản tùy thuộc vào yêu cầu." -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" "Bộ xem (viewset) để quản lý các đối tượng AttributeValue. Bộ xem này cung " "cấp các chức năng để liệt kê, truy xuất, tạo, cập nhật và xóa các đối tượng " @@ -3191,7 +3185,7 @@ msgstr "" "sử dụng các trình serializer phù hợp cho các hành động khác nhau. Khả năng " "lọc được cung cấp thông qua DjangoFilterBackend." -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3205,7 +3199,7 @@ msgstr "" "của các danh mục. Chế độ xem này cũng áp dụng các quyền truy cập để đảm bảo " "chỉ những người dùng được ủy quyền mới có thể truy cập vào dữ liệu cụ thể." -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3217,7 +3211,7 @@ msgstr "" "thương hiệu. Nó sử dụng khung ViewSet của Django để đơn giản hóa việc triển " "khai các điểm cuối API cho các đối tượng thương hiệu." -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3235,7 +3229,7 @@ msgstr "" "thức để lấy thông tin chi tiết về sản phẩm, áp dụng quyền truy cập và truy " "cập phản hồi liên quan đến sản phẩm." -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3250,13 +3244,13 @@ msgstr "" "khác nhau. Mục đích của lớp này là cung cấp truy cập thuận tiện đến các tài " "nguyên liên quan đến Nhà cung cấp thông qua khung làm việc Django REST." -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" "Đại diện cho tập hợp các đối tượng Feedback. Lớp này quản lý các thao tác " @@ -3266,18 +3260,18 @@ msgstr "" "với các đối tượng Feedback có thể truy cập. Nó kế thừa từ lớp cơ sở " "`EvibesViewSet` và sử dụng hệ thống lọc của Django để truy vấn dữ liệu." -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" -"ViewSet để quản lý đơn hàng và các hoạt động liên quan. Lớp này cung cấp các " -"chức năng để truy xuất, sửa đổi và quản lý các đối tượng đơn hàng. Nó bao " +"ViewSet để quản lý đơn hàng và các hoạt động liên quan. Lớp này cung cấp các" +" chức năng để truy xuất, sửa đổi và quản lý các đối tượng đơn hàng. Nó bao " "gồm các điểm cuối (endpoint) khác nhau để xử lý các hoạt động liên quan đến " "đơn hàng như thêm hoặc xóa sản phẩm, thực hiện giao dịch mua hàng cho cả " "người dùng đã đăng ký và chưa đăng ký, cũng như truy xuất các đơn hàng đang " @@ -3285,12 +3279,12 @@ msgstr "" "serializer khác nhau tùy thuộc vào hành động cụ thể đang được thực hiện và " "áp dụng quyền truy cập tương ứng khi tương tác với dữ liệu đơn hàng." -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" "Cung cấp một bộ xem (viewset) để quản lý các thực thể OrderProduct. Bộ xem " @@ -3300,11 +3294,11 @@ msgstr "" "hành động được yêu cầu. Ngoài ra, nó cung cấp một hành động chi tiết để xử " "lý phản hồi cho các thực thể OrderProduct." -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "Quản lý các hoạt động liên quan đến hình ảnh sản phẩm trong ứng dụng." -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3312,20 +3306,20 @@ msgstr "" "Quản lý việc truy xuất và xử lý các thực thể PromoCode thông qua các hành " "động API khác nhau." -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "Đại diện cho một bộ xem để quản lý các chương trình khuyến mãi." -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "Quản lý các hoạt động liên quan đến dữ liệu kho trong hệ thống." -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." @@ -3333,13 +3327,13 @@ msgstr "" "Bộ công cụ ViewSet để quản lý các thao tác liên quan đến Danh sách mong " "muốn. Bộ công cụ WishlistViewSet cung cấp các điểm cuối để tương tác với " "danh sách mong muốn của người dùng, cho phép truy xuất, chỉnh sửa và tùy " -"chỉnh các sản phẩm trong danh sách mong muốn. Bộ công cụ này hỗ trợ các chức " -"năng như thêm, xóa và thực hiện các thao tác hàng loạt đối với các sản phẩm " -"trong danh sách mong muốn. Các kiểm tra quyền truy cập được tích hợp để đảm " -"bảo rằng người dùng chỉ có thể quản lý danh sách mong muốn của chính mình " +"chỉnh các sản phẩm trong danh sách mong muốn. Bộ công cụ này hỗ trợ các chức" +" năng như thêm, xóa và thực hiện các thao tác hàng loạt đối với các sản phẩm" +" trong danh sách mong muốn. Các kiểm tra quyền truy cập được tích hợp để đảm" +" bảo rằng người dùng chỉ có thể quản lý danh sách mong muốn của chính mình " "trừ khi được cấp quyền rõ ràng." -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3348,17 +3342,17 @@ msgid "" "on the request context." msgstr "" "Lớp này cung cấp chức năng viewset để quản lý các đối tượng `Address`. Lớp " -"AddressViewSet cho phép thực hiện các thao tác CRUD, lọc dữ liệu và các hành " -"động tùy chỉnh liên quan đến các thực thể địa chỉ. Nó bao gồm các hành vi " +"AddressViewSet cho phép thực hiện các thao tác CRUD, lọc dữ liệu và các hành" +" động tùy chỉnh liên quan đến các thực thể địa chỉ. Nó bao gồm các hành vi " "chuyên biệt cho các phương thức HTTP khác nhau, các tùy chỉnh serializer và " "xử lý quyền truy cập dựa trên bối cảnh yêu cầu." -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Lỗi địa chỉ địa lý: {e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3366,8 +3360,8 @@ msgid "" "using the specified filter backend and dynamically uses different " "serializers based on the action being performed." msgstr "" -"Xử lý các tác vụ liên quan đến Thẻ Sản phẩm trong ứng dụng. Lớp này cung cấp " -"chức năng để truy xuất, lọc và serialize các đối tượng Thẻ Sản phẩm. Nó hỗ " +"Xử lý các tác vụ liên quan đến Thẻ Sản phẩm trong ứng dụng. Lớp này cung cấp" +" chức năng để truy xuất, lọc và serialize các đối tượng Thẻ Sản phẩm. Nó hỗ " "trợ lọc linh hoạt trên các thuộc tính cụ thể bằng cách sử dụng backend lọc " "được chỉ định và động sử dụng các serializer khác nhau tùy thuộc vào hành " "động đang thực hiện." diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo index f0251c441d9d446071585f073f2b9e105604b29c..9afa46910c1e0c3b390f6a98135e20d2f772056c 100644 GIT binary patch delta 5456 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 p3p?z1FQ>u`-zzVnQz*t7\n" "Language-Team: BRITISH ENGLISH \n" @@ -27,7 +27,8 @@ msgstr "处于活动状态" #: engine/core/abstract.py:21 msgid "" -"if set to false, this object can't be seen by users without needed permission" +"if set to false, this object can't be seen by users without needed " +"permission" msgstr "如果设置为 false,则没有必要权限的用户无法查看此对象" #: engine/core/abstract.py:23 engine/core/choices.py:18 @@ -46,89 +47,89 @@ msgstr "改装" msgid "when the object was last modified" msgstr "对象最后一次编辑的时间" -#: engine/core/admin.py:68 +#: engine/core/admin.py:85 msgid "translations" msgstr "翻译" -#: engine/core/admin.py:72 +#: engine/core/admin.py:89 msgid "general" msgstr "一般情况" -#: engine/core/admin.py:74 +#: engine/core/admin.py:91 msgid "relations" msgstr "关系" -#: engine/core/admin.py:76 +#: engine/core/admin.py:93 msgid "additional info" msgstr "其他信息" -#: engine/core/admin.py:94 +#: engine/core/admin.py:111 msgid "metadata" msgstr "元数据" -#: engine/core/admin.py:101 +#: engine/core/admin.py:118 msgid "timestamps" msgstr "时间戳" -#: engine/core/admin.py:116 +#: engine/core/admin.py:133 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "激活选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:121 +#: engine/core/admin.py:138 msgid "selected items have been activated." msgstr "所选项目已激活!" -#: engine/core/admin.py:127 +#: engine/core/admin.py:144 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "停用选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:132 +#: engine/core/admin.py:149 msgid "selected items have been deactivated." msgstr "选定项目已停用!" -#: engine/core/admin.py:144 engine/core/graphene/object_types.py:587 -#: engine/core/graphene/object_types.py:594 engine/core/models.py:801 +#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:801 #: engine/core/models.py:809 msgid "attribute value" msgstr "属性值" -#: engine/core/admin.py:145 engine/core/graphene/object_types.py:76 +#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75 #: engine/core/models.py:810 msgid "attribute values" msgstr "属性值" -#: engine/core/admin.py:156 +#: engine/core/admin.py:172 msgid "image" msgstr "图片" -#: engine/core/admin.py:157 engine/core/graphene/object_types.py:475 +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 msgid "images" msgstr "图片" -#: engine/core/admin.py:169 engine/core/models.py:566 +#: engine/core/admin.py:184 engine/core/models.py:566 msgid "stock" msgstr "库存" -#: engine/core/admin.py:170 engine/core/graphene/object_types.py:641 +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "股票" -#: engine/core/admin.py:183 engine/core/models.py:1818 +#: engine/core/admin.py:196 engine/core/models.py:1818 msgid "order product" msgstr "订购产品" -#: engine/core/admin.py:184 engine/core/graphene/object_types.py:390 +#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389 #: engine/core/models.py:1819 msgid "order products" msgstr "订购产品" -#: engine/core/admin.py:197 engine/core/admin.py:198 +#: engine/core/admin.py:210 engine/core/admin.py:211 msgid "children" msgstr "儿童" -#: engine/core/admin.py:966 +#: engine/core/admin.py:980 msgid "Config" msgstr "配置" @@ -152,7 +153,8 @@ msgstr "已交付" msgid "canceled" msgstr "已取消" -#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "失败" @@ -189,11 +191,9 @@ msgid "" "OpenApi3 schema for this API. Format can be selected via content " "negotiation. Language can be selected with Accept-Language and query " "parameter both." -msgstr "" -"该 API 的 OpenApi3 模式。可通过内容协商选择格式。可通过 Accept-Language 和查" -"询参数选择语言。" +msgstr "该 API 的 OpenApi3 模式。可通过内容协商选择格式。可通过 Accept-Language 和查询参数选择语言。" -#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "缓存输入/输出" @@ -217,7 +217,7 @@ msgstr "获取应用程序的可公开参数" msgid "send a message to the support team" msgstr "向支持团队发送信息" -#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 msgid "request a CORSed URL" msgstr "请求 CORSed URL。只允许使用 https。" @@ -237,9 +237,7 @@ msgstr "以企业身份购买订单" msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." -msgstr "" -"使用提供的带有 `product_uuid` 和 `attributes` 的 `products` 作为企业购买订" -"单。" +msgstr "使用提供的带有 `product_uuid` 和 `attributes` 的 `products` 作为企业购买订单。" #: engine/core/docs/drf/views.py:164 msgid "download a digital asset from purchased digital order" @@ -266,7 +264,8 @@ msgid "rewrite an existing attribute group saving non-editables" msgstr "重写保存不可编辑的现有属性组" #: engine/core/docs/drf/viewsets.py:96 -msgid "rewrite some fields of an existing attribute group saving non-editables" +msgid "" +"rewrite some fields of an existing attribute group saving non-editables" msgstr "重写现有属性组的某些字段,保存不可编辑的内容" #: engine/core/docs/drf/viewsets.py:106 @@ -314,7 +313,8 @@ msgid "rewrite an existing attribute value saving non-editables" msgstr "重写现有属性值,保存不可编辑属性" #: engine/core/docs/drf/viewsets.py:186 -msgid "rewrite some fields of an existing attribute value saving non-editables" +msgid "" +"rewrite some fields of an existing attribute value saving non-editables" msgstr "重写现有属性值的某些字段,保存不可编辑的属性值" #: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 @@ -347,9 +347,9 @@ msgstr "重写现有类别的某些字段,保存不可编辑内容" #: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704 #: engine/core/docs/drf/viewsets.py:988 -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:208 -#: engine/core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "搜索引擎优化元快照" @@ -367,11 +367,11 @@ msgstr "对于非工作人员用户,只有他们自己的订单才会被退回 #: engine/core/docs/drf/viewsets.py:281 msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" +"Case-insensitive substring search across human_readable_id, " +"order_products.product.name, and order_products.product.partnumber" msgstr "" -"在 human_readable_id、order_products.product.name 和 order_products.product." -"partnumber 中进行不区分大小写的子串搜索" +"在 human_readable_id、order_products.product.name 和 " +"order_products.product.partnumber 中进行不区分大小写的子串搜索" #: engine/core/docs/drf/viewsets.py:288 msgid "Filter orders with buy_time >= this ISO 8601 datetime" @@ -403,12 +403,11 @@ msgstr "按订单状态筛选(不区分大小写的子串匹配)" #: engine/core/docs/drf/viewsets.py:324 msgid "" -"Order by one of: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Prefix with '-' for descending (e.g. '-" -"buy_time')." +"Order by one of: uuid, human_readable_id, user_email, user, status, created," +" modified, buy_time, random. Prefix with '-' for descending (e.g. " +"'-buy_time')." msgstr "" -"按以下一项排序:uuid、human_readable_id、user_email、user、status、created、" -"modified、buy_time、random。前缀\"-\"表示降序(例如\"-buy_time\")。" +"按以下一项排序:uuid、human_readable_id、user_email、user、status、created、modified、buy_time、random。前缀\"-\"表示降序(例如\"-buy_time\")。" #: engine/core/docs/drf/viewsets.py:336 msgid "retrieve a single order (detailed view)" @@ -447,9 +446,7 @@ msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." -msgstr "" -"完成订单购买。如果使用 \"force_balance\",则使用用户的余额完成购买;如果使用 " -"\"force_payment\",则启动交易。" +msgstr "完成订单购买。如果使用 \"force_balance\",则使用用户的余额完成购买;如果使用 \"force_payment\",则启动交易。" #: engine/core/docs/drf/viewsets.py:397 msgid "retrieve current pending order of a user" @@ -459,7 +456,7 @@ msgstr "检索用户当前的挂单" msgid "retrieves a current pending order of an authenticated user" msgstr "检索已验证用户的当前待处理订单" -#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 msgid "purchase an order without account creation" msgstr "无需创建账户即可购买订单" @@ -584,25 +581,17 @@ msgstr "使用提供的 `product_uuids` 从愿望清单中删除多个产品" msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" -"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, " -"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, " -"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" -"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), " -"`true`/`false` for booleans, integers, floats; otherwise treated as " -"string. \n" +"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n" +"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n" "• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n" "Examples: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\"," -"\"bluetooth\"]`, \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" "根据一个或多个属性名/值对进行筛选。 \n" "- 语法**:`attr_name=method-value[;attr2=method2-value2]...`\n" -"- 方法**(如果省略,默认为 `icontains`):iexact`、`exact`、`icontains`、" -"`contains`、`isnull`、`startswith`、`istartswith`、`endswith`、`iendswith`、" -"`regex`、`iregex`、`lt`、`lte`、`gt`、`gte`、`in`。\n" -"- 值键入**:首先尝试使用 JSON(因此可以传递列表/字段),布尔、整数、浮点数使" -"用 `true`/`false`,否则视为字符串。 \n" +"- 方法**(如果省略,默认为 `icontains`):iexact`、`exact`、`icontains`、`contains`、`isnull`、`startswith`、`istartswith`、`endswith`、`iendswith`、`regex`、`iregex`、`lt`、`lte`、`gt`、`gte`、`in`。\n" +"- 值键入**:首先尝试使用 JSON(因此可以传递列表/字段),布尔、整数、浮点数使用 `true`/`false`,否则视为字符串。 \n" "- **Base64**:以 `b64-` 作为前缀,对原始值进行 URL 安全的 base64 编码。 \n" "示例 \n" "color=exact-red`、`size=gt-10`、`features=in-[\"wifi\"、\"bluetooth\"]`、\n" @@ -618,8 +607,7 @@ msgstr "(产品 UUID" #: engine/core/docs/drf/viewsets.py:581 msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" +"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" "用逗号分隔的要排序的字段列表。前缀为 `-` 表示降序。 \n" @@ -636,6 +624,9 @@ msgid "Product UUID or slug" msgstr "产品 UUID 或 Slug" #: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618 +#: engine/core/graphene/dashboard_mutations/product.py:80 +#: engine/core/graphene/dashboard_mutations/product.py:118 +#: engine/core/graphene/dashboard_mutations/product.py:166 msgid "create a product" msgstr "创建产品" @@ -1048,296 +1039,297 @@ msgstr "级别" msgid "Product UUID" msgstr "产品 UUID" -#: engine/core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:40 msgid "key to look for in or set into the cache" msgstr "在缓存中查找或设置的关键字" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:41 msgid "data to store in cache" msgstr "缓存中要存储的数据" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:44 msgid "timeout in seconds to set the data for into the cache" msgstr "将数据设置为缓存的超时(以秒为单位" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:47 msgid "cached data" msgstr "缓存数据" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:62 msgid "camelized JSON data from the requested URL" msgstr "从请求的 URL 中获取驼峰化 JSON 数据" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:239 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:239 msgid "only URLs starting with http(s):// are allowed" msgstr "只允许使用以 http(s):// 开头的 URL" -#: engine/core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:83 msgid "add a product to the order" msgstr "在订单中添加产品" -#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 -#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131 +#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287 #, python-brace-format msgid "order {order_uuid} not found" msgstr "未找到 {order_uuid} 订单!" -#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159 msgid "remove a product from the order" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:137 msgid "remove all products from the order" msgstr "从订单中删除所有产品" -#: engine/core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:182 msgid "buy an order" msgstr "购买订单" -#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" -#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 -#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:713 +#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501 +#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" -#: engine/core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:245 msgid "perform an action on a list of products in the order" msgstr "对订单中的产品列表执行操作" -#: engine/core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:250 msgid "remove/add" msgstr "删除/添加" -#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323 msgid "action must be either add or remove" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: engine/core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:293 msgid "perform an action on a list of products in the wishlist" msgstr "对愿望清单中的产品列表执行操作" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:311 msgid "please provide wishlist_uuid value" msgstr "请提供 `wishlist_uuid` 值。" -#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 -#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 -#: engine/core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404 +#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460 +#: engine/core/graphene/mutations.py:504 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "未找到 Wishlist {wishlist_uuid}!" -#: engine/core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:382 msgid "add a product to the wishlist" msgstr "在订单中添加产品" -#: engine/core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:410 msgid "remove a product from the wishlist" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:438 msgid "remove all products from the wishlist" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:466 msgid "buy all products from the wishlist" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:510 msgid "buy a product" msgstr "购买订单" -#: engine/core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:516 msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:549 msgid "add or delete a feedback for orderproduct" msgstr "添加或删除订单产品的反馈信息" -#: engine/core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:573 msgid "action must be either `add` or `remove`" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: engine/core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:576 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "未找到订购产品 {order_product_uuid}!" -#: engine/core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:582 msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: engine/core/graphene/mutations.py:680 engine/core/models.py:955 +#: engine/core/graphene/mutations.py:618 engine/core/models.py:955 #: engine/core/models.py:968 engine/core/models.py:1383 #: engine/core/models.py:1412 engine/core/models.py:1437 -#: engine/core/viewsets.py:716 +#: engine/core/viewsets.py:715 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: engine/core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:632 msgid "limit must be between 1 and 10" msgstr "限值必须在 1 和 10 之间" -#: engine/core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:681 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 工作起来得心应手" -#: engine/core/graphene/object_types.py:83 -#: engine/core/graphene/object_types.py:371 -#: engine/core/graphene/object_types.py:418 engine/core/models.py:772 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:772 #: engine/core/models.py:1250 engine/core/models.py:1897 msgid "attributes" msgstr "属性" -#: engine/core/graphene/object_types.py:96 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "分组属性" -#: engine/core/graphene/object_types.py:103 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "属性组" -#: engine/core/graphene/object_types.py:117 -#: engine/core/graphene/object_types.py:194 -#: engine/core/graphene/object_types.py:224 engine/core/models.py:432 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:432 msgid "categories" msgstr "类别" -#: engine/core/graphene/object_types.py:125 engine/core/models.py:503 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:503 msgid "brands" msgstr "品牌" -#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "类别" -#: engine/core/graphene/object_types.py:197 -#: engine/core/graphene/object_types.py:318 engine/core/models.py:283 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "加价百分比" -#: engine/core/graphene/object_types.py:200 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "哪些属性和值可用于筛选该类别。" -#: engine/core/graphene/object_types.py:204 -msgid "minimum and maximum prices for products in this category, if available." +#: engine/core/graphene/object_types.py:203 +msgid "" +"minimum and maximum prices for products in this category, if available." msgstr "该类别产品的最低和最高价格(如有)。" -#: engine/core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "此类别的标签" -#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "该类别中的产品" -#: engine/core/graphene/object_types.py:325 engine/core/models.py:188 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "供应商" -#: engine/core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "纬度(Y 坐标)" -#: engine/core/graphene/object_types.py:330 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "经度(X 坐标)" -#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "如何" -#: engine/core/graphene/object_types.py:360 -#: engine/core/graphene/object_types.py:484 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "评级值从 1 到 10(包括 10),如果未设置,则为 0。" -#: engine/core/graphene/object_types.py:367 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" -#: engine/core/graphene/object_types.py:372 -#: engine/core/graphene/object_types.py:419 engine/core/models.py:1244 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 msgid "notifications" msgstr "通知" -#: engine/core/graphene/object_types.py:373 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "此订单产品的下载网址(如适用" -#: engine/core/graphene/object_types.py:374 engine/core/models.py:1736 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 msgid "feedback" msgstr "反馈意见" -#: engine/core/graphene/object_types.py:408 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: engine/core/graphene/object_types.py:410 engine/core/models.py:1214 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 msgid "billing address" msgstr "账单地址" -#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "此订单的送货地址,如果与账单地址相同或不适用,请留空" -#: engine/core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "订单总价" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "订单中产品的总数量" -#: engine/core/graphene/object_types.py:417 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "订单中的所有产品都是数字产品吗?" -#: engine/core/graphene/object_types.py:420 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "此订单的交易" -#: engine/core/graphene/object_types.py:439 engine/core/models.py:1278 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 msgid "orders" msgstr "订单" -#: engine/core/graphene/object_types.py:460 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "图片 URL" -#: engine/core/graphene/object_types.py:467 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "产品图片" -#: engine/core/graphene/object_types.py:474 engine/core/models.py:431 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:431 #: engine/core/models.py:586 msgid "category" msgstr "类别" -#: engine/core/graphene/object_types.py:476 engine/core/models.py:1737 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737 msgid "feedbacks" msgstr "反馈意见" -#: engine/core/graphene/object_types.py:477 engine/core/models.py:502 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:502 #: engine/core/models.py:595 msgid "brand" msgstr "品牌" -#: engine/core/graphene/object_types.py:478 engine/core/models.py:106 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "属性组" -#: engine/core/graphene/object_types.py:479 +#: engine/core/graphene/object_types.py:478 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1345,7 +1337,7 @@ msgstr "属性组" msgid "price" msgstr "价格" -#: engine/core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:479 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1353,39 +1345,39 @@ msgstr "价格" msgid "quantity" msgstr "数量" -#: engine/core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "反馈数量" -#: engine/core/graphene/object_types.py:482 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "仅限个人订购的产品" -#: engine/core/graphene/object_types.py:485 +#: engine/core/graphene/object_types.py:484 msgid "discount price" msgstr "折扣价" -#: engine/core/graphene/object_types.py:509 engine/core/models.py:658 +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 msgid "products" msgstr "产品" -#: engine/core/graphene/object_types.py:612 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "促销代码" -#: engine/core/graphene/object_types.py:622 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "销售产品" -#: engine/core/graphene/object_types.py:629 engine/core/models.py:904 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 msgid "promotions" msgstr "促销活动" -#: engine/core/graphene/object_types.py:633 engine/core/models.py:187 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "供应商" -#: engine/core/graphene/object_types.py:634 engine/core/models.py:657 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:657 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1393,98 +1385,98 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: engine/core/graphene/object_types.py:645 engine/core/models.py:927 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 msgid "wishlisted products" msgstr "心愿单上的产品" -#: engine/core/graphene/object_types.py:651 engine/core/models.py:944 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 msgid "wishlists" msgstr "愿望清单" -#: engine/core/graphene/object_types.py:655 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "标签产品" -#: engine/core/graphene/object_types.py:662 engine/core/models.py:224 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 #: engine/core/models.py:601 msgid "product tags" msgstr "产品标签" -#: engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "标签类别" -#: engine/core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "类别标签" -#: engine/core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "项目名称" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:677 msgid "company name" msgstr "公司名称" -#: engine/core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:678 msgid "company address" msgstr "公司地址" -#: engine/core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:679 msgid "company phone number" msgstr "公司电话号码" -#: engine/core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:680 msgid "email from, sometimes it must be used instead of host user value" msgstr "电子邮件来自\",有时必须使用它来代替主机用户值" -#: engine/core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:681 msgid "email host user" msgstr "电子邮件主机用户" -#: engine/core/graphene/object_types.py:683 +#: engine/core/graphene/object_types.py:682 msgid "maximum amount for payment" msgstr "最高付款额" -#: engine/core/graphene/object_types.py:684 +#: engine/core/graphene/object_types.py:683 msgid "minimum amount for payment" msgstr "最低付款额" -#: engine/core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:684 msgid "analytics data" msgstr "分析数据" -#: engine/core/graphene/object_types.py:686 +#: engine/core/graphene/object_types.py:685 msgid "advertisement data" msgstr "广告数据" -#: engine/core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:688 msgid "company configuration" msgstr "配置" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:692 msgid "language code" msgstr "语言代码" -#: engine/core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:693 msgid "language name" msgstr "语言名称" -#: engine/core/graphene/object_types.py:695 +#: engine/core/graphene/object_types.py:694 msgid "language flag, if exists :)" msgstr "语言标志(如果有):)" -#: engine/core/graphene/object_types.py:698 +#: engine/core/graphene/object_types.py:697 msgid "supported languages" msgstr "获取支持的语言列表" +#: engine/core/graphene/object_types.py:728 #: engine/core/graphene/object_types.py:729 #: engine/core/graphene/object_types.py:730 -#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "产品搜索结果" -#: engine/core/graphene/object_types.py:732 +#: engine/core/graphene/object_types.py:731 msgid "posts search results" msgstr "产品搜索结果" @@ -1495,8 +1487,7 @@ msgid "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." msgstr "" -"代表一组属性,可以是分层的。该类用于管理和组织属性组。一个属性组可以有一个父" -"组,从而形成一个层次结构。这有助于在复杂的系统中更有效地分类和管理属性。" +"代表一组属性,可以是分层的。该类用于管理和组织属性组。一个属性组可以有一个父组,从而形成一个层次结构。这有助于在复杂的系统中更有效地分类和管理属性。" #: engine/core/models.py:91 msgid "parent of this group" @@ -1524,10 +1515,7 @@ msgid "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." msgstr "" -"代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定" -"义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信" -"息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约" -"束,使其适用于与第三方供应商交互的系统。" +"代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约束,使其适用于与第三方供应商交互的系统。" #: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" @@ -1577,9 +1565,8 @@ msgid "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." msgstr "" -"代表用于分类或识别产品的产品标签。ProductTag 类旨在通过内部标签标识符和用户友" -"好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并" -"为管理目的提供元数据定制功能。" +"代表用于分类或识别产品的产品标签。ProductTag " +"类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。" #: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" @@ -1606,9 +1593,7 @@ msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." -msgstr "" -"代表用于产品的类别标签。该类是类别标签的模型,可用于关联和分类产品。它包括内" -"部标签标识符和用户友好显示名称的属性。" +msgstr "代表用于产品的类别标签。该类是类别标签的模型,可用于关联和分类产品。它包括内部标签标识符和用户友好显示名称的属性。" #: engine/core/models.py:254 msgid "category tag" @@ -1630,10 +1615,7 @@ msgid "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." msgstr "" -"代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关" -"系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类" -"通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类" -"别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" +"代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" #: engine/core/models.py:274 msgid "upload an image representing this category" @@ -1684,11 +1666,10 @@ msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " "associated categories, a unique slug, and priority order. It allows for the " -"organization and representation of brand-related data within the application." +"organization and representation of brand-related data within the " +"application." msgstr "" -"代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描" -"述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数" -"据。" +"代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" #: engine/core/models.py:448 msgid "name of this brand" @@ -1732,16 +1713,15 @@ msgstr "类别" #: engine/core/models.py:508 msgid "" -"Represents the stock of a product managed in the system. This class provides " -"details about the relationship between vendors, products, and their stock " +"Represents the stock of a product managed in the system. This class provides" +" details about the relationship between vendors, products, and their stock " "information, as well as inventory-related properties like price, purchase " "price, quantity, SKU, and digital assets. It is part of the inventory " "management system to allow tracking and evaluation of products available " "from various vendors." msgstr "" -"代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细" -"信息,以及与库存相关的属性,如价格、购买价格、数量、SKU 和数字资产。它是库存" -"管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" +"代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU " +"和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" #: engine/core/models.py:520 msgid "the vendor supplying this product stock" @@ -1819,11 +1799,8 @@ msgid "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." msgstr "" -"代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提" -"供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电" -"子商务或库存管理的系统。该类可与相关模型(如类别、品牌和 ProductTag)交互,并" -"对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数" -"据及其相关信息。" +"代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" +" ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" #: engine/core/models.py:585 msgid "category this product belongs to" @@ -1878,13 +1855,11 @@ msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " "associated with other entities. Attributes have associated categories, " -"groups, value types, and names. The model supports multiple types of values, " -"including string, integer, float, boolean, array, and object. This allows " +"groups, value types, and names. The model supports multiple types of values," +" including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." msgstr "" -"代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义" -"数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符" -"串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" +"代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" #: engine/core/models.py:733 msgid "group of this attribute" @@ -1945,12 +1920,10 @@ msgstr "属性" #: engine/core/models.py:777 msgid "" -"Represents a specific value for an attribute that is linked to a product. It " -"links the 'attribute' to a unique 'value', allowing better organization and " -"dynamic representation of product characteristics." -msgstr "" -"代表与产品相关联的属性的特定值。它将 \"属性 \"与唯一的 \"值 \"联系起来,从而" -"更好地组织和动态呈现产品特征。" +"Represents a specific value for an attribute that is linked to a product. It" +" links the 'attribute' to a unique 'value', allowing better organization and" +" dynamic representation of product characteristics." +msgstr "代表与产品相关联的属性的特定值。它将 \"属性 \"与唯一的 \"值 \"联系起来,从而更好地组织和动态呈现产品特征。" #: engine/core/models.py:788 msgid "attribute of this value" @@ -1967,14 +1940,12 @@ msgstr "该属性的具体值" #: engine/core/models.py:815 msgid "" "Represents a product image associated with a product in the system. This " -"class is designed to manage images for products, including functionality for " -"uploading image files, associating them with specific products, and " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " "determining their display order. It also includes an accessibility feature " "with alternative text for the images." msgstr "" -"代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将" -"图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本" -"的可访问性功能。" +"代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本的可访问性功能。" #: engine/core/models.py:826 msgid "provide alternative text for the image for accessibility" @@ -2014,12 +1985,10 @@ msgid "" "is used to define and manage promotional campaigns that offer a percentage-" "based discount for products. The class includes attributes for setting the " "discount rate, providing details about the promotion, and linking it to the " -"applicable products. It integrates with the product catalog to determine the " -"affected items in the campaign." +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." msgstr "" -"代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。" -"该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目" -"录集成,以确定促销活动中受影响的产品。" +"代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" #: engine/core/models.py:880 msgid "percentage discount for the selected products" @@ -2059,9 +2028,7 @@ msgid "" "class provides functionality to manage a collection of products, supporting " "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." -msgstr "" -"代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添" -"加和删除产品等操作,还支持同时添加和删除多个产品的操作。" +msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" #: engine/core/models.py:926 msgid "products that the user has marked as wanted" @@ -2085,12 +2052,10 @@ msgid "" "store information about documentaries related to specific products, " "including file uploads and their metadata. It contains methods and " "properties to handle the file type and storage path for the documentary " -"files. It extends functionality from specific mixins and provides additional " -"custom features." +"files. It extends functionality from specific mixins and provides additional" +" custom features." msgstr "" -"代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传" -"及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混" -"合类的功能,并提供了额外的自定义功能。" +"代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" #: engine/core/models.py:998 msgid "documentary" @@ -2106,20 +2071,17 @@ msgstr "未解决" #: engine/core/models.py:1014 msgid "" -"Represents an address entity that includes location details and associations " -"with a user. Provides functionality for geographic and address data storage, " -"as well as integration with geocoding services. This class is designed to " -"store detailed address information including components like street, city, " -"region, country, and geolocation (longitude and latitude). It supports " -"integration with geocoding APIs, enabling the storage of raw API responses " -"for further processing or inspection. The class also allows associating an " -"address with a user, facilitating personalized data handling." +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." msgstr "" -"代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功" -"能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城" -"市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码 API 集成,可存" -"储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个" -"性化数据处理。" +"代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" +" API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" #: engine/core/models.py:1029 msgid "address line for the customer" @@ -2182,10 +2144,8 @@ msgid "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." msgstr "" -"代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode 类存储促销" -"代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户" -"(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符" -"合约束条件。" +"代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " +"类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" #: engine/core/models.py:1087 msgid "unique code used by a user to redeem a discount" @@ -2255,8 +2215,7 @@ msgstr "促销代码" msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." -msgstr "" -"只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" +msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" #: engine/core/models.py:1171 msgid "promocode already used" @@ -2271,15 +2230,12 @@ msgstr "促销代码 {self.uuid} 的折扣类型无效!" msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " -"information, status, associated user, notifications, and related operations. " -"Orders can have associated products, promotions can be applied, addresses " +"information, status, associated user, notifications, and related operations." +" Orders can have associated products, promotions can be applied, addresses " "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." msgstr "" -"代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发" -"货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活" -"动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产" -"品。" +"代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。" #: engine/core/models.py:1213 msgid "the billing address used for this order" @@ -2427,9 +2383,7 @@ msgid "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." msgstr "" -"管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用" -"于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库" -"字段对反馈数据进行有效建模和管理。" +"管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。" #: engine/core/models.py:1711 msgid "user-provided comments about their experience with the product" @@ -2440,7 +2394,8 @@ msgid "feedback comments" msgstr "反馈意见" #: engine/core/models.py:1719 -msgid "references the specific product in an order that this feedback is about" +msgid "" +"references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" #: engine/core/models.py:1720 @@ -2467,10 +2422,9 @@ msgid "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." msgstr "" -"代表与订单及其属性相关联的产品。OrderProduct 模型维护订单中产品的相关信息,包" -"括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理" -"返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总" -"价或为数字产品生成下载 URL。该模型与订单和产品模型集成,并存储对它们的引用。" +"代表与订单及其属性相关联的产品。OrderProduct " +"模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" +" URL。该模型与订单和产品模型集成,并存储对它们的引用。" #: engine/core/models.py:1757 msgid "the price paid by the customer for this product at purchase time" @@ -2578,13 +2532,13 @@ msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " "access downloads related to order products. It maintains information about " -"the associated order product, the number of downloads, and whether the asset " -"is publicly visible. It includes a method to generate a URL for downloading " -"the asset when the associated order is in a completed status." +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." msgstr "" -"代表与订单相关的数字资产的下载功能。DigitalAssetDownload 类提供了管理和访问与" -"订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公" -"开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的 URL 的方法。" +"代表与订单相关的数字资产的下载功能。DigitalAssetDownload " +"类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" +" URL 的方法。" #: engine/core/models.py:1961 msgid "download" @@ -2640,12 +2594,9 @@ msgstr "你好%(order.user.first_name)s_、" #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" -" we have taken your order into work. below are " -"the details of your\n" +" we have taken your order into work. below are the details of your\n" " order:" -msgstr "" -"感谢您的订单 #%(order.pk)s!我们很高兴地通知您,我们已将您的订单付诸实施。以" -"下是您的订单详情:" +msgstr "感谢您的订单 #%(order.pk)s!我们很高兴地通知您,我们已将您的订单付诸实施。以下是您的订单详情:" #: engine/core/templates/digital_order_created_email.html:112 #: engine/core/templates/digital_order_delivered_email.html:110 @@ -2668,8 +2619,7 @@ msgstr "总价" msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." -msgstr "" -"如果您有任何问题,请随时通过 %(config.EMAIL_HOST_USER)s 联系我们的支持人员。" +msgstr "如果您有任何问题,请随时通过 %(config.EMAIL_HOST_USER)s 联系我们的支持人员。" #: engine/core/templates/digital_order_created_email.html:133 #, python-format @@ -2750,8 +2700,7 @@ msgstr "" #: engine/core/templates/shipped_order_created_email.html:101 #: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" +"thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "感谢您的订购!我们很高兴确认您的购买。以下是您的订单详情:" @@ -2790,23 +2739,23 @@ msgstr "超时值无效,必须介于 0 和 216000 秒之间" #: engine/core/utils/emailing.py:27 #, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME}| 联系我们" +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME}| 联系我们" #: engine/core/utils/emailing.py:73 #, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME}| 订单确认" +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME}| 订单确认" #: engine/core/utils/emailing.py:105 #, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | 订单已送达" +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | 订单已送达" #: engine/core/utils/emailing.py:188 #, python-brace-format -msgid "{config.PROJECT_NAME} | promocode granted" -msgstr "{config.PROJECT_NAME} | 授予的促销代码" +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "{settings.PROJECT_NAME} | 授予的促销代码" #: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." @@ -2825,17 +2774,14 @@ msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!" msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -msgstr "" -"处理网站地图索引请求并返回 XML 响应。它确保响应包含适当的 XML 内容类型标头。" +msgstr "处理网站地图索引请求并返回 XML 响应。它确保响应包含适当的 XML 内容类型标头。" #: engine/core/views.py:88 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -msgstr "" -"处理网站地图的详细视图响应。该函数处理请求,获取相应的网站地图详细响应,并将 " -"Content-Type 标头设置为 XML。" +msgstr "处理网站地图的详细视图响应。该函数处理请求,获取相应的网站地图详细响应,并将 Content-Type 标头设置为 XML。" #: engine/core/views.py:123 msgid "" @@ -2873,13 +2819,10 @@ msgstr "处理未注册企业的购买逻辑。" #: engine/core/views.py:314 msgid "" "Handles the downloading of a digital asset associated with an order.\n" -"This function attempts to serve the digital asset file located in the " -"storage directory of the project. If the file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "处理与订单相关的数字资产的下载。\n" -"此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会" -"出现 HTTP 404 错误,表示资源不可用。" +"此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" #: engine/core/views.py:325 msgid "order_product_uuid is required" @@ -2908,28 +2851,25 @@ msgstr "未找到 favicon" #: engine/core/views.py:386 msgid "" "Handles requests for the favicon of a website.\n" -"This function attempts to serve the favicon file located in the static " -"directory of the project. If the favicon file is not found, an HTTP 404 " -"error is raised to indicate the resource is unavailable." +"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." msgstr "" "处理网站的 favicon 请求。\n" -"该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon " -"文件,就会出现 HTTP 404 错误,表示资源不可用。" +"该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" #: engine/core/views.py:398 msgid "" -"Redirects the request to the admin index page. The function handles incoming " -"HTTP requests and redirects them to the Django admin interface index page. " +"Redirects the request to the admin index page. The function handles incoming" +" HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -"将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django " -"管理界面索引页面。它使用 Django 的 `redirect` 函数来处理 HTTP 重定向。" +"将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " +"`redirect` 函数来处理 HTTP 重定向。" #: engine/core/views.py:411 msgid "Returns current version of the eVibes. " msgstr "返回 eVibes 的当前版本。" -#: engine/core/viewsets.py:137 +#: engine/core/viewsets.py:136 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2937,22 +2877,21 @@ msgid "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." msgstr "" -"定义用于管理 Evibes 相关操作的视图集。EvibesViewSet 类继承于 ModelViewSet,提" -"供了处理 Evibes 实体上的操作和运行的功能。它包括支持基于当前操作的动态序列化" -"类、可定制的权限和渲染格式。" +"定义用于管理 Evibes 相关操作的视图集。EvibesViewSet 类继承于 ModelViewSet,提供了处理 Evibes " +"实体上的操作和运行的功能。它包括支持基于当前操作的动态序列化类、可定制的权限和渲染格式。" -#: engine/core/viewsets.py:157 +#: engine/core/viewsets.py:156 msgid "" -"Represents a viewset for managing AttributeGroup objects. Handles operations " -"related to AttributeGroup, including filtering, serialization, and retrieval " -"of data. This class is part of the application's API layer and provides a " -"standardized way to process requests and responses for AttributeGroup data." +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." msgstr "" -"代表用于管理属性组对象的视图集。处理与 AttributeGroup 相关的操作,包括过滤、" -"序列化和检索数据。该类是应用程序 API 层的一部分,为处理 AttributeGroup 数据的" -"请求和响应提供了标准化方法。" +"代表用于管理属性组对象的视图集。处理与 AttributeGroup 相关的操作,包括过滤、序列化和检索数据。该类是应用程序 API 层的一部分,为处理" +" AttributeGroup 数据的请求和响应提供了标准化方法。" -#: engine/core/viewsets.py:176 +#: engine/core/viewsets.py:175 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2961,23 +2900,21 @@ msgid "" "specific fields or retrieving detailed versus simplified information " "depending on the request." msgstr "" -"在应用程序中处理与属性对象相关的操作。提供一组 API 端点,用于与属性数据交互。" -"该类管理属性对象的查询、过滤和序列化,允许对返回的数据进行动态控制,例如根据" -"请求按特定字段进行过滤或检索详细信息与简化信息。" +"在应用程序中处理与属性对象相关的操作。提供一组 API " +"端点,用于与属性数据交互。该类管理属性对象的查询、过滤和序列化,允许对返回的数据进行动态控制,例如根据请求按特定字段进行过滤或检索详细信息与简化信息。" -#: engine/core/viewsets.py:195 +#: engine/core/viewsets.py:194 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " "AttributeValue objects. It integrates with Django REST Framework's viewset " -"mechanisms and uses appropriate serializers for different actions. Filtering " -"capabilities are provided through the DjangoFilterBackend." +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." msgstr "" -"用于管理 AttributeValue 对象的视图集。该视图集提供了用于列出、检索、创建、更" -"新和删除 AttributeValue 对象的功能。它与 Django REST 框架的视图集机制集成,并" -"为不同的操作使用适当的序列化器。过滤功能通过 DjangoFilterBackend 提供。" +"用于管理 AttributeValue 对象的视图集。该视图集提供了用于列出、检索、创建、更新和删除 AttributeValue 对象的功能。它与 " +"Django REST 框架的视图集机制集成,并为不同的操作使用适当的序列化器。过滤功能通过 DjangoFilterBackend 提供。" -#: engine/core/viewsets.py:214 +#: engine/core/viewsets.py:213 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2985,21 +2922,20 @@ msgid "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." msgstr "" -"管理类别相关操作的视图。CategoryViewSet 类负责处理系统中与类别模型相关的操" -"作。它支持类别数据的检索、过滤和序列化。视图集还强制执行权限,确保只有授权用" -"户才能访问特定数据。" +"管理类别相关操作的视图。CategoryViewSet " +"类负责处理系统中与类别模型相关的操作。它支持类别数据的检索、过滤和序列化。视图集还强制执行权限,确保只有授权用户才能访问特定数据。" -#: engine/core/viewsets.py:327 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." msgstr "" -"代表用于管理品牌实例的视图集。该类提供了查询、过滤和序列化品牌对象的功能。它" -"使用 Django 的 ViewSet 框架来简化品牌对象 API 端点的实现。" +"代表用于管理品牌实例的视图集。该类提供了查询、过滤和序列化品牌对象的功能。它使用 Django 的 ViewSet 框架来简化品牌对象 API " +"端点的实现。" -#: engine/core/viewsets.py:439 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3009,12 +2945,11 @@ msgid "" "product details, applying permissions, and accessing related feedback of a " "product." msgstr "" -"管理与系统中的 \"产品 \"模型相关的操作。该类为管理产品提供了一个视图集,包括" -"产品的筛选、序列化和对特定实例的操作。该类从 `EvibesViewSet` 扩展而来,使用通" -"用功能,并与 Django REST 框架集成,用于 RESTful API 操作。包括检索产品详细信" -"息、应用权限和访问产品相关反馈的方法。" +"管理与系统中的 \"产品 \"模型相关的操作。该类为管理产品提供了一个视图集,包括产品的筛选、序列化和对特定实例的操作。该类从 " +"`EvibesViewSet` 扩展而来,使用通用功能,并与 Django REST 框架集成,用于 RESTful API " +"操作。包括检索产品详细信息、应用权限和访问产品相关反馈的方法。" -#: engine/core/viewsets.py:575 +#: engine/core/viewsets.py:574 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3022,85 +2957,79 @@ msgid "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." msgstr "" -"代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor 数据。" -"它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 " -"Django REST 框架提供对 Vendor 相关资源的简化访问。" +"代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor " +"数据。它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 Django REST 框架提供对 Vendor 相关资源的简化访问。" -#: engine/core/viewsets.py:595 +#: engine/core/viewsets.py:594 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " "retrieving details. The purpose of this view set is to provide different " -"serializers for different actions and implement permission-based handling of " -"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." msgstr "" -"处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检" -"索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈" -"对象实施基于权限的处理。它扩展了基本的 `EvibesViewSet` 并使用 Django 的过滤系" -"统来查询数据。" +"处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" +" `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。" -#: engine/core/viewsets.py:622 +#: engine/core/viewsets.py:621 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " "various endpoints for handling order operations such as adding or removing " -"products, performing purchases for registered as well as unregistered users, " -"and retrieving the current authenticated user's pending orders. The ViewSet " -"uses multiple serializers based on the specific action being performed and " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." msgstr "" -"用于管理订单和相关操作的 ViewSet。该类提供了检索、修改和管理订单对象的功能。" -"它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执" -"行购买操作,以及检索当前已验证用户的待处理订单。ViewSet 根据正在执行的特定操" -"作使用多个序列化器,并在与订单数据交互时执行相应的权限。" +"用于管理订单和相关操作的 " +"ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet" +" 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" -#: engine/core/viewsets.py:826 +#: engine/core/viewsets.py:825 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " -"includes filtering, permission checks, and serializer switching based on the " -"requested action. Additionally, it provides a detailed action for handling " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" msgstr "" -"提供用于管理 OrderProduct 实体的视图集。该视图集可进行 CRUD 操作和特定于 " -"OrderProduct 模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化" -"器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct 实例的反馈信息" +"提供用于管理 OrderProduct 实体的视图集。该视图集可进行 CRUD 操作和特定于 OrderProduct " +"模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " +"实例的反馈信息" -#: engine/core/viewsets.py:880 +#: engine/core/viewsets.py:879 msgid "Manages operations related to Product images in the application. " msgstr "管理应用程序中与产品图像相关的操作。" -#: engine/core/viewsets.py:893 +#: engine/core/viewsets.py:892 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。" -#: engine/core/viewsets.py:915 +#: engine/core/viewsets.py:914 msgid "Represents a view set for managing promotions. " msgstr "代表用于管理促销活动的视图集。" -#: engine/core/viewsets.py:928 +#: engine/core/viewsets.py:927 msgid "Handles operations related to Stock data in the system." msgstr "处理系统中与库存数据有关的操作。" -#: engine/core/viewsets.py:942 +#: engine/core/viewsets.py:941 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " -"retrieval, modification, and customization of products within the wish list. " -"This ViewSet facilitates functionality such as adding, removing, and bulk " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " "actions for wishlist products. Permission checks are integrated to ensure " "that users can only manage their own wishlists unless explicit permissions " "are granted." msgstr "" -"用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端" -"点,允许检索、修改和定制愿望清单中的产品。该 ViewSet 支持添加、删除和批量操作" -"愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望" -"清单,除非获得明确的权限。" +"用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 " +"ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" -#: engine/core/viewsets.py:1057 +#: engine/core/viewsets.py:1056 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3108,16 +3037,15 @@ msgid "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." msgstr "" -"该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关" -"的 CRUD 操作、过滤和自定义操作。它包括针对不同 HTTP 方法的专门行为、序列化器" -"重载以及基于请求上下文的权限处理。" +"该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " +"HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" -#: engine/core/viewsets.py:1124 +#: engine/core/viewsets.py:1123 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" -#: engine/core/viewsets.py:1132 +#: engine/core/viewsets.py:1131 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " @@ -3125,6 +3053,4 @@ msgid "" "using the specified filter backend and dynamically uses different " "serializers based on the action being performed." msgstr "" -"在应用程序中处理与产品标签相关的操作。该类提供了检索、筛选和序列化产品标签对" -"象的功能。它支持使用指定的过滤后端对特定属性进行灵活过滤,并根据正在执行的操" -"作动态使用不同的序列化器。" +"在应用程序中处理与产品标签相关的操作。该类提供了检索、筛选和序列化产品标签对象的功能。它支持使用指定的过滤后端对特定属性进行灵活过滤,并根据正在执行的操作动态使用不同的序列化器。" diff --git a/engine/payments/locale/ar_AR/LC_MESSAGES/django.mo b/engine/payments/locale/ar_AR/LC_MESSAGES/django.mo index 228ca5c8b7d25de64b7f4fab2b3e7d8ab1bc1539..b21b0bbd6788b3cdff5d1302f86f4bbfaeae7ab8 100644 GIT binary patch delta 3065 zcma)+OKcTY7{?FtE+|q^d8r3PUcwbNqP)Z?5#oa?W#d8}?wyvA+nMXkTpkfJDYmz@ zk{DCnxsVWODUVVCu|dOv7&N+Yq2|m&7A7o+3!=EtNTR=QX70T$Y@BrZJ98f2ga0YxQ`XjO5SDp4biM7|@did#hrS4_@>I9`$z#H&I z<{zBM8NT0|q|^-93z<@Va2gzh{HaU)Tc%W`zF{zhiJNc({1?uL8zw8&0N;eNz6-8_ zd!RV}42t2)@Im+;Y=qb0Bk&fS12sn4;97VeJPsGYOK?8^)vpXlN{z#d9GIMOA-tRK zr{OyI5|n*Ca4!4+N=7H31auJ+yZS!kPf!B73YWs);c7T{YMRhCI2Hfu4F>yR5sHE9 zP!9Y73rISTDAx1ceveXr^L+^p!eP8><{i9jf<5pz=6`@|`TlZdn(1EL?j5g5q#Bl-}A7o8d=L_FbQY{xZ15#4$Jx8E9nnIg~)Yf@7fUp?pbyNJh(fB@lTQ zr$~B(o>QouJkn(Hh=LFEN-xQ!5+x;gc@|3jtIwirAU#lh9%HbASJdIgsYiJwBgt+F zF9|2NU>UrNR~k}ECl4alp6S_0XOtx6x<^v?>hm~*hj??@1m#Swl1M9$+-LQ?7212O zefpiyx7@(WhmPmwTGPn`dZ!g=*VB$0+O57NYihIQ7K(PjT;6MQ+*X~pip3pPewX&` zx1+Khgn87pQn#Is4 zJ64I4CEp<`UCLr3G>OC4JFLJiXwOYNMr_>e6qu-PD_OqPW{0+)(_2DKCn#x@dcxaA)FtM55#oq8dGy^iWb@ z^s6hOw{PF_oJ=gMw(#hFE|;A`t(mjVIP&e-@lTNYNIzDaS4Q=MQ*alDx&^r@f~RS4 zZx0<)blRLSSfhKdOgcO%utODhNF1NUEK~hv zDDE^TWhg-nmygy2rfeVKpWy)S z$q2JuSj1iyQO#2Q#wKSw;|hVCHT~jFhKJ+#wHZ#+;1Gk(YUp)6v!e&ipseOJ8FaMro{7Q1-l=$dQWRKg~)sa&oA>*N>Bym@D?U?wjP`3-| z0Cll>Jo$mRJ>5w1m88@BiH!D<${yv2NH9$0MYA4>Z4j9|HER`fjmZv_3rvWfr<39y z(wLKNoJ4&IolHgvE)gVC+_aqZPQ^6c9whfc8bbOSduP&S6KkhT-9w@~%XgI2^!M&> zoHc970982X(z~yYcDoP1e<>*2ZUNPWgIbW1>ZpWc4QWu9`l3 mspul9;)$-M;nI{u91`v}G){j^53K1mjX&3ZeR|K$So$BX%xpaX delta 1025 zcmXxjPe>GD7{~EvOI^#|vMKYwu4Vq&km@9wg@-PY2M?=wka9D!MO~vT3Y4Y5E*(sU z3_4^WEChKFA?h9>qToUuIv98>R6L}YI@I?!JNqy*pP6}Q=6&DieP*|HqcQcv$$M$U zS@tUS@qpPyTs^>n_;}E)7(ZbbZ7bNsb!ooYaqPq(#_%ZiVX1a_a{E8E}iEMWLkXa)R z;Vm*bjS>2{J@T-{jS}8g>I32I3@)KQG=QZziWX3iUtdko`WgiE=X~U=vCs0N68rkf-?>45n{)a5PrK!YoxPSpv zeXyEdG;vftoXK9A>RN@VXwdrW17+;xx%`Wtdl zi%vS~T-B@U@U~nvXJ2ABMH}ovvCY-vZb?0-?{Z;YJZ*ad\n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "لم يتم تعيين مسار تكامل البوابة" msgid "invalid integration path: %(path)s" msgstr "مسار تكامل غير صالح: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "لم يتناسب مبلغ المعاملة مع الحدود المسموح بها:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "مطلوب مزود للحصول على الأسعار من" msgid "couldn't find provider {provider}" msgstr "تعذر العثور على مزود {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | إيداع الرصيد" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | إيداع الرصيد" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"توفر هذه الفئة نقطة نهاية API للتعامل مع معاملات الإيداع.\n" +"وهي تدعم إنشاء معاملة إيداع بعد التحقق من صحة البيانات المقدمة. إذا لم تتم مصادقة المستخدم، يتم إرجاع استجابة مناسبة. عند التحقق والتنفيذ بنجاح، يتم توفير استجابة بتفاصيل المعاملة." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"يعالج طلبات رد الاتصال الواردة إلى واجهة برمجة التطبيقات.\n" +"يقوم هذا الصنف بمعالجة طلبات HTTP POST الواردة وتوجيهها إلى معالج pgateway المناسب بناءً على معلمة البوابة المقدمة. وهو مصمم للتعامل مع أحداث رد الاتصال الواردة من أنظمة خارجية وتوفير استجابة HTTP مناسبة تشير إلى النجاح أو الفشل." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "لا تحتوي المعاملة {transaction.uuid} على بوابة" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "البوابة {transaction.gateway} ليس لها تكامل" #: engine/payments/viewsets.py:14 msgid "" @@ -205,4 +235,3 @@ msgstr "" "للقراءة فقط للتفاعل مع بيانات المعاملات. وتستخدم أداة TransactionSerializer " "لتسلسل البيانات وإلغاء تسلسلها. تضمن الفئة أن المستخدمين المصرح لهم فقط، " "الذين يستوفون أذونات محددة، يمكنهم الوصول إلى المعاملات." - diff --git a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.mo index b5bb69c8bff75668d74f3ce454bd0c56b9a7af43..3db4976e91f0d1f573c51cb7f1512fadbd7a676c 100644 GIT binary patch delta 2869 zcmZvcO^g&p6vqnz1^h_fjcNZx2kjxkIkFj=9Z*Lvk!rqhcUijW(r7mLs)Y(dHfM?(i z)>oawH@r_SQR)(S0J5Y$f)~OW$e;R>e_cFW+z6K?tkD)m9ImCDMZOQMUICKiGgTKK$;Z^7L0@@AF<9@Y=$#XD* zV&F8C4}OOMl3tA$ckurF1xmfa`=@X-+`+9()r%J^bsKyOhOD22ck_Nb`dD>YKbu=b$@8J4bS1n6-U>HC11S&n_GRcVllNKh@JP9#FE6T7jX)GFq9T2TvDHwV zrfiCFQ%MOxY!P%ZL=hR1qHB4imZYhOwQwG&>m~pFA(F`u&->$MCL4G}eo2L-OR8O> zUdto$N^VDZ&f<}@Y~+!F?}H&K%FxCCo{G}$ZK>q`5Q#*7$-NBJEb@dX#h@&ddc>r5 zpPACnriqEYsivWeD|>s3`*qED9XlPysok3x*;89h97NW$R&|Xq-m9x7ipEW~t`qxo zJF`CZI(0g&S^dE1w#u@xTIh8(GT!TE;;PnrKE{SlT$T>o**Z2hsz-P29uq_J?3gBB zHj@yqbhGpg*Tj!Rj~j0T?c(CbHV0c_z(W66(a=F;RV%LvJ5&8AC4bQEt_6I-N7y9sTG z^*s)I?z|^PEJo*rnQJoQqQl$Oh~G9eF?Iwj57vnk6V) z(YxY)QdFbniW({sjDB-U=*J)5_OL9B z^h;dy+;o0aH(mFH2~4X#rLj8QoIRAr`C;915!bMvxak_ zW)CIVBuW1N3+DQctBNx|%DNr#)QvN(Wphm@&g7kXWP;g4dKwS$s^)aF-RrU>)8it< zR7G#Mc-~67CoJEjrcRQ_r-ocJk69J9Xnmsi8nl8e0)3KR-H7gC~$34noEVkoLdmC{Zno?TB za?(N=7Xj;z-@I1-g&uc7(WkUcFQm34QPR;8ZR8AAdzDqk^~$nQha*K6T2pDubr0I% z(}xFV$&%CJae1Pru~^HG2WGN6Q_-WYo&`GVo(Nm?VubT?-ab0`XuZbM7Fno@@^WoU zs-g_Jco#jegT7c53CK2D4onaSI`T_ugThUzokD~-OG}f5q`v1=sNK#%0AWQ*GY;Nu z*{AiYo!=e3p8Qv96xEX*JL}woi#N@_l6QPsr+SJ;7X$pL#{5QiJLEZ_>>R~{haykW to86hs2j02pjgfwDRz@G&wSCJ&V|yNbVCRCZ(_-4%5sL3x!|1=08S`tIR9`@H8p=iNEyIp_Vf<8!3&wWi{> z5nCw@lzf@lZhW_dAL2#1SqNX^VcOnclzP}_whBA33gfsEPvcU|;1(Rk75EVM;#1s+ zKXJKP!2*?w9qMow4b7+l`%!;<0oUVYtie0jgj2W{-{Ua;z%_WBmm-)!4K#rj_zczm zx#tHAFuwibrh|q*sE#|C{yOYHt>`3bLg$dnu6SNYP3Q);;(gRgXVH%zaSXpBmz`N= zwi$kCs6&y zQSCRe3nx(v`r@_EV?n9<&5c%48#HUdR@4MycoolM80S!_|A*T!!oMkFz1WCx&m2}$ zzl8_!F|s>0kIK{nDx-}d@~@kAe$=58m8t`%y^3KwrjcyfJ_gUaMc_H1fs=C6OeET{%2@Agb52WMuhCw;}c;bL^LPh0F*Z%=nu ey#MIFBi+}WG3V6l>0CaMA51%!(wW4-sQm{j*=y$j diff --git a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po index b1e70a15..5fc9e729 100644 --- a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "cesta integrace brány není nastavena" msgid "invalid integration path: %(path)s" msgstr "neplatná cesta integrace: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Částka transakce se nevešla do povolených limitů:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "Je třeba mít poskytovatele, od kterého lze získat sazby" msgid "couldn't find provider {provider}" msgstr "Nepodařilo se najít poskytovatele {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Zůstatek vkladu" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | zůstatek vkladu" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Tato třída poskytuje koncový bod API pro zpracování vkladových transakcí.\n" +"Podporuje vytvoření vkladové transakce po ověření zadaných údajů. Pokud uživatel není ověřen, je vrácena odpovídající odpověď. Při úspěšném ověření a provedení je poskytnuta odpověď s údaji o transakci." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Zpracovává příchozí požadavky na zpětné volání rozhraní API.\n" +"Tato třída zpracovává a směruje příchozí požadavky HTTP POST na příslušnou obsluhu pgateway na základě zadaného parametru brány. Je navržena tak, aby zpracovávala události zpětného volání přicházející z externích systémů a poskytovala příslušnou odpověď HTTP označující úspěch nebo selhání." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transakce {transaction.uuid} nemá žádnou bránu" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Brána {transaction.gateway} nemá žádnou integraci" #: engine/payments/viewsets.py:14 msgid "" @@ -206,4 +236,3 @@ msgstr "" "Pro serializaci a deserializaci dat používá TransactionSerializer. Třída " "zajišťuje, že k transakcím mohou přistupovat pouze oprávnění uživatelé, " "kteří splňují určitá oprávnění." - diff --git a/engine/payments/locale/da_DK/LC_MESSAGES/django.mo b/engine/payments/locale/da_DK/LC_MESSAGES/django.mo index a612a36829fa1b8a04e9b9df1a3f1038b23343ac..23ee6b05d1a1be37601cc333e063f67a48977718 100644 GIT binary patch delta 2811 zcmai!UyL179LG;}m+rRo4^_0~Y?c18_i6~0s){Jx3c5+R9=ve&&bjxFJ9p-qGjq2a zWXb~~5|WKS2?-)4LLxMzK~i!b5Ts8$R^qK*#Ggk}pWn=#-MdAc+?mhZGw1xy@Av)v zesgluCp)rJYldD>j2&DXxL#eN)a~-TlpAB~Q1NaXyn}c5!&~6%!%D5<{i$=6s=#01 z-OO)1k3IZ0MBiYCv%` zf@Dh_fmxM@r+7dF^)cKBzkr+J$VG)iRmhoYC%g^b+5i7E6vHn;4PS#I@#jz+_yJx5 zmohmEH$Zv+A~#9Fdu!4ES{_a^A<~|K;_=YMMJmRiM7SI7h4(^PHwPuhFGGpwGbro6 zgA&M(ko2pcAwTs8H*skBI*J$G1j&Z#u0wyx@e@o0@OdbP{({@#O58`$Jdd(L>SK&c zjLAVVwiL)6lS2tQ9}=MqQSJ&ZIY*jG6p-}F*ev-k$JPA@sey7_!$XB@1s5HsuHuqv zm#DXLUCJdX5NFTfl7f_4kRj5SLxPf_^LvqhQ96@KE{CMzaxSR}86us?j2QW#EGQ6@ z*cmgcA4y^pI#WyhD6BS$$;WilI2}gX4-?ynjl5G6CiDX9n5#u?KWyll34&=;Yw6fN zoTb(!PA8F0npWR7xxYF()%2aN1;#nuiKCizj?LK6ag-*5b|$8#CiUcjgHvK?ksZ@v zXD9aYN_YCc;hOjn>uKYxr=u`GF=JuZ_n0V`bxds9HnDM4?@u(Yc-HxikQF#t*jR|b zc5R6J{lMyR)YkSedqWdwH|rAHE?n=QLKu3`w~48Y5Mt{(QRplRd43Ji(8#4ViCjmq zt{Xo{V_Q{=g%PjCxQM20=yf7QAMnw$oyhsjETqX*M+wQLolX>s=qR4mVwrKGU7Ali(dH1op;0ws0g@&};OLl6L&@>86HlnZR=l>gZk@hE}(vsjQy1O_LS95H;{U_F2Bz=6q{a&bH{`Q)~m_*v5G!9!da>@;m`=uZoE0rc8!pmF zP>$Gt|r}w delta 1039 zcmXxjPe_zO7{~Ev%Uv~hb6-<;ORII={I^yfgrKAhgb+M*SVKWfQ8aN|^G}fwEERN7 zSz;-OAOjB}cqoLZ=;$HBh@fs2bQ9E@r@Hk0y}mo_yq}r(o!Ob^nfLwB_BEdUT~YMJ zC`oE9bVJ1I8>6vDL#eA`bSow?ihVeb)2Qd$sMPvM%UMjIGL}MZxF40`JLuqJ z?7|h)xGmJt?V5GZmnLjL66r3Y z2vu}nn?9uuMelWs+hV-VUny0zN4=YhROhc!M?Fc^?whGeYM~H>Tihd{rLUn-PIwJv zMej(=>nkW_NI~!cSokUz6}{nw5}~0i=nToYRZ+S9CTB$Ae=TpJuz{pf)Y+`)\n" "Language-Team: BRITISH ENGLISH \n" @@ -87,7 +87,8 @@ msgstr "Valutaer" #: engine/payments/models.py:100 msgid "comma separated list of currencies supported by this gateway, " -msgstr "kommasepareret liste over valutaer, der understøttes af denne gateway," +msgstr "" +"kommasepareret liste over valutaer, der understøttes af denne gateway," #: engine/payments/models.py:106 msgid "minimum transaction amount" @@ -138,6 +139,10 @@ msgstr "gateway-integrationsstien er ikke indstillet" msgid "invalid integration path: %(path)s" msgstr "Ugyldig integrationssti: %(path)s." +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Transaktionsbeløbet passede ikke ind i de tilladte grænser:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +193,36 @@ msgstr "Der er brug for en udbyder at få priser fra" msgid "couldn't find provider {provider}" msgstr "Kunne ikke finde udbyder {provider}." -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Saldoindbetaling" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | Saldoindbetaling" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Denne klasse indeholder et API-slutpunkt til håndtering af indbetalingstransaktioner.\n" +"Den understøtter oprettelsen af en indbetalingstransaktion efter validering af de angivne data. Hvis brugeren ikke er autentificeret, returneres et passende svar. Ved vellykket validering og udførelse leveres et svar med transaktionsoplysningerne." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Håndterer indgående tilbagekaldsanmodninger til API'en.\n" +"Denne klasse behandler og dirigerer indgående HTTP POST-anmodninger til den relevante pgateway-handler baseret på den angivne gateway-parameter. Den er designet til at håndtere tilbagekaldshændelser, der kommer fra eksterne systemer, og give et passende HTTP-svar, der angiver succes eller fiasko." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transaktion {transaction.uuid} har ingen gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} har ingen integration" #: engine/payments/viewsets.py:14 msgid "" @@ -207,4 +238,3 @@ msgstr "" "serialisere og deserialisere data. Klassen sikrer, at kun autoriserede " "brugere, der opfylder specifikke tilladelser, kan få adgang til " "transaktionerne." - diff --git a/engine/payments/locale/de_DE/LC_MESSAGES/django.mo b/engine/payments/locale/de_DE/LC_MESSAGES/django.mo index b592ee684b5bb02a49dac349245828ed102206d7..562a43fd019bb7f50a6ea99367f46498a8b25c56 100644 GIT binary patch delta 2924 zcmai#TWB0r7{^cTJ*}6vTB~jK^kQ!&Yf)5awIwz&jkPv5X#`Q~WasSenAtPynVD=8 zTNVX<@WqFq_~3)0ctKRK2n7oTBWh6}eeflqNTE+f1))&T-#4?H-PnSMOnx(G=6sj` z_kGEgEuY=nm|eZ-4aM5cwSnvH1xg)|`-S{s?O2q*+X?%5_cVMMzOz`Vn|MFFM5!Kl z2|mvL#-*I$`T1o^t%1{!E%hP15q=K&QRn!zOR0wXo|_eH`~~;Hf8Zv#Z@E%k@Hr^& z$Kf7WhvN7PD28X?M)(6<4KKni@Cv*gYK&CjUU&=q7;c8=;3oX5-?$+uwFobAV0n{U z;q^T4hY!KSP`-N&u7|Hf$>(F`P`(SG7_d+Rc>|KP z`T$aPbp}dcUqcD#CwM=+0QbWUY*G#N%sTX!8dunO8BRcXz6`~|Qldc7td4R(vXM-? zxx|62?K!f*#5v+*OPWj;)lzqIiCq~gNl3~oYpc}1wZx$;>4Da|n;VgmR>*327nE+7 ztaosUN-_nzxUS=p`ii2m$YE}YI3JFmYe-H=XhEoq`VxC+e;)Xzo<)v`t3&{fWS&F>#)ayd8ZC~)(=h0UNNc$wycX@7>;?xaqY|t zjnu?RtdmG56{CBH1`Ayyl_1u|(2HYTb5YU6F^93CU6dxBb`Fk=4C$dG!y{s7o*l2o z$(jp@O4pjP5t_u|^q3bLUq?3c*x8PYV za=q%1_DUqAC%iE5^VsCvoNVlQC{@a=r7>S3nT-@-Nyzx!|INIWb3;CNCP^I% z7xWR^%Dj|@b3Un+)Zd&i#Z+1fYi-f$K~l+_cO*(4398X^Sr26eM!&Wa`q;6-KH1pS zYT^0)oTh<4*UZh%c<=ne#Sf5rrys8xrKs))zTKYa5^__7NYmg^osJ2EYLLWx^z?Vj z-dz@(L`oZO@ogN?xKjfs$53!U@*^C*Bg)H-iH`z1PnzUHgB?2aHn1JgkIf$QnP#ia5(yh~K zJI8)!n8qN>gTBb84XeZ1v~e?)W(nr`SuOcxLe2|ZH?j4o87Hv?hw8ym+OkqL(@F9FXaMx6?t(%)UTO4oJwt&q*=UP!E zTExu@NlMY1#-*9F71t0!+U8pZ85g3nIv>?cnz%K~Ws}zk{X1UIO)`U=eShsi&c`Y5 zJ#SKto?fzI^OF62MA%^~9y8RWtZR%3|2cADf_#jo(s1VenEwPsH{cANVE0UKU-jv> h)>s#Yjvjfe|G>!cCwdR}pVBAwuowCfMUx>={{r`V1}gvn delta 1051 zcmX}rPe>GD7{~EPb62a`9IbRM%S|_1l^~)JN+O~^1O*jqbr54ST9?)_Y8Om`1rJ?3 zcv$Kb*}qF5K^al^f{2R#9=Zq}g6I!~bcpQG_ct@!!@T>McjldapZA$}?r#3uQJQP4 zxokuat(8`>V+Xs`()vEi!ZQF&^OFb4<~1j+iaSomh)$tj7VY!#s9l5trh1+<`N= z4!_|Nvy#Q4!GJh!<3_X@SDxpd2!fU9NK0^oJ<3;?095%Sv zYy)QT6qTGpm-+1%b-2of2v6^$f0L)1@heg#tBwVU)FF$sIQC*2YQ@KJFOJ|Qe1QC= zeGdJJhv_e%7IJV|aDNa>Dp8J;I8Ne5yp1Z=TP)xY)I=vKM<@{lde83i* zM~!!w?FhD`#uZV|k0XcOaH)R-C->=54SRyh{1qypkGK`*QKd~Wm_^tYoWNaS|0$;E zze5V??+@OlAG)snus-OT_H}o7-l_NRmy`?2T%pYM{uQcD8%^1F(Ryf=V3B?(VI`-p zp%QDu6IDffBoX$TP?gmp^lIHh{3x`;E1`F+?5P68%V@%XsHA zLxtR^m+0@`zx!5eZKRxbrlUin-sxO+cEPz+\n" "Language-Team: BRITISH ENGLISH \n" @@ -142,6 +142,10 @@ msgstr "Gateway-Integrationspfad ist nicht festgelegt" msgid "invalid integration path: %(path)s" msgstr "Ungültiger Integrationspfad: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Der Transaktionsbetrag passte nicht in die zulässigen Grenzen:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -192,10 +196,36 @@ msgstr "Sie benötigen einen Anbieter, bei dem Sie die Preise erfragen können." msgid "couldn't find provider {provider}" msgstr "Anbieter {provider} konnte nicht gefunden werden" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Saldo Einzahlung" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | Saldoeinlage" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Diese Klasse bietet einen API-Endpunkt zur Abwicklung von Einzahlungstransaktionen.\n" +"Sie unterstützt die Erstellung einer Einzahlungstransaktion nach Validierung der angegebenen Daten. Wenn der Benutzer nicht authentifiziert ist, wird eine entsprechende Antwort zurückgegeben. Bei erfolgreicher Validierung und Ausführung wird eine Antwort mit den Transaktionsdetails geliefert." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Verarbeitet eingehende Callback-Anforderungen an die API.\n" +"Diese Klasse verarbeitet und leitet eingehende HTTP-POST-Anfragen an den entsprechenden pgateway-Handler auf der Grundlage des angegebenen Gateway-Parameters weiter. Sie wurde entwickelt, um Callback-Ereignisse von externen Systemen zu verarbeiten und eine entsprechende HTTP-Antwort zu liefern, die Erfolg oder Misserfolg anzeigt." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transaktion {transaction.uuid} hat kein Gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} hat keine Integration" #: engine/payments/viewsets.py:14 msgid "" @@ -206,9 +236,8 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet für die Handhabung von Nur-Lese-Operationen auf dem " -"Transaktionsmodell. Diese Klasse bietet eine schreibgeschützte Schnittstelle " -"für die Interaktion mit Transaktionsdaten. Sie verwendet den " -"TransactionSerializer zur Serialisierung und Deserialisierung der Daten. Die " -"Klasse stellt sicher, dass nur autorisierte Benutzer, die bestimmte " +"Transaktionsmodell. Diese Klasse bietet eine schreibgeschützte Schnittstelle" +" für die Interaktion mit Transaktionsdaten. Sie verwendet den " +"TransactionSerializer zur Serialisierung und Deserialisierung der Daten. Die" +" Klasse stellt sicher, dass nur autorisierte Benutzer, die bestimmte " "Berechtigungen erfüllen, auf die Transaktionen zugreifen können." - diff --git a/engine/payments/locale/en_GB/LC_MESSAGES/django.mo b/engine/payments/locale/en_GB/LC_MESSAGES/django.mo index 7d07be07b2fdcbc69da08703ce84560fb7705c06..88fe2dede16f1d8d79d6a15ea21daa79c0921b79 100644 GIT binary patch literal 6012 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 b-?O8;>x?t%>`Y}-ZhFA!92m}xWb*b8V!Utb diff --git a/engine/payments/locale/en_GB/LC_MESSAGES/django.po b/engine/payments/locale/en_GB/LC_MESSAGES/django.po index abbd5dc9..f8f562c5 100644 --- a/engine/payments/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/payments/locale/en_GB/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 Egor "fureunoir" Gorbunov # This file is distributed under the same license as the eVibes package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -142,6 +142,10 @@ msgstr "gateway integration path is not set" msgid "invalid integration path: %(path)s" msgstr "invalid integration path: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "The transaction amount didn't fit into allowed limits:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -192,10 +196,36 @@ msgstr "A provider to get rates from is required" msgid "couldn't find provider {provider}" msgstr "Couldn't find provider {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Balance Deposit" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | balance deposit" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transaction {transaction.uuid} has no gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} has no integration" #: engine/payments/viewsets.py:14 msgid "" @@ -210,4 +240,3 @@ msgstr "" "It uses the TransactionSerializer for serializing and deserializing the " "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." - diff --git a/engine/payments/locale/en_US/LC_MESSAGES/django.mo b/engine/payments/locale/en_US/LC_MESSAGES/django.mo index 1be2df9390788c3703b21af36f986e5944f82752..5493817efe80e342766bb64b3a5836dd81cf79ef 100644 GIT binary patch literal 6000 zcmeH~Pi!1l9mgLK2wncPltK$l%L~-RPQ6bKuGaq{58@;!+_FNUb<=XayG}dgU4<#HHeZfC~pi`TS;Pz2meADdAA0Jnigv z-kbO5_xt|-%x`Wyc;rWlHp6v{>&Nd?YEkY#z#nb$Ncn6ET;ka`z*+DoA5`iAp5OS8 zQcdtL;0oi99c2yu=Rd5}C&8CMhSba8{opS^e(E*;PJ+J$KLY+8oCDtikArjfDb)bK z1ZI4-S`epZ-M2|1v22=insczvgh^ z|IeWC^cE=c9%T?ysfWRn;Nu{osSY>`Zh^wfOCZ#!Uslgw2ZjGPKsop5L*>4YfWp59 zMc+A4`2RX6eCD9={{v9?{}(9yKSW2)ISUG}&w(=kn-va0;s1xA@c&a#=KTQ_{{IAu zKI+q@JP&}v-|-4hf+EiuQ24wEJ`E&GQ9>aX?xs+!XriAqOr<`@C3;9WA#x!Lpq`Mws(rCSIe*li7tysmeR(^0JbD6@mq$TM}xL|$MWW4$=^qk-<3AlNaz7j$aB zom-bVoy9uawR(QN(`s~geW!bYaZV>`+_TQHmMwG|=UIK5OWp3eUSHenzHJ|qurf(~ zgwjbR8j^_^sopWpdOD7Z6PdT?d-O-M5|f(HW;Siv(6tx%s|F+i?RH6&qhdJ zsnt*8P}{4ljZC23&}B9(C9h6F3tbnjP$0D~i6dvB$MbtI20H|wp4yf= zOp6FDdkbaSMqU!bcuhplCb9Dw8QaLU8ffJ5B#Bd@9KL(0Eli~2zBXw3wl&)HQAh8Y z!1qegWZ3~}j2U?97n|jdnGhDmnKn7|qD=I$-t^6Sk5zVDl6xq9?({ zL8Y2C4JzI<4dh&!iY<3&+q#^4F#d^946v%PdvT!VL72@9@kQ4uCd{zfO+YlDLJWXxX^O3I#9UkrsAqPn- z_n6i!&jT+yfrk*rWBsmGp^{!#tUP|7<(2M8|osdmyXc4Ho&kJABf45QHD$FIL9r^Jfuz5(6?z5 zlhvYa8^YQY?o$_X&*0oUyj&P9k`!6=;Kfs@&=%XH%9K-uNyVq?1nbFzFrHFDJcw0j zuKFSNsLiU3pm=-T@)5f29#|F9i{5`_S8-7lryc*wCI|c|7mQ2uYzf-Y-H2 z$98S4Y7Exzo!YmhvsCXn@;%J)GV**0J$xyZ>>++%=Dvx^G72z%`LqnC+q+KX@8ZJ~ zlT}CjN3yAxntgQ*x0d|sTI(BYUt3!2ZeN~XUAnGc9EHk3a#=5vN3-KKuaN$5?Y3UJ z(pgyA)Td`of4TLg#s=@sG;6N9f$udJ@_}o1e5)TQ>~fCBL0hqHM_$E znKO!-r;@<<(K+4QH7UH!ZgnpYuoaN5?-?D$z@o!Z3&&5Lmw;t)|% zblvRfbGp2pos9JHS$%4Xud-$MxmQ;fb@9Er@?KqeudaNzb>;lH?&589o4RuT9qP)3 zsyeDrUnoC@)FvORlotzkUR5ssuc}J5_+BU~M?_S3i=uM$6ymE_t-6z<^3tt~O1>)p zABxHq`A)cPQMvNoDJs|Qrl?#mtIk?cNm(SNX}zf2xZ|QyzBg+H;vE*1_3!rjy;INL TMNRpfRGfEHQ$G9dYs!BEEdeel delta 1076 zcmZA0KWGzS7{~D^wrQ*;Hb!k)jhfhKtA!3Of>!ZQGbq}Il8QsIgcxfeCdEcjtOQ&I zBLv&c6cnr=Y6*xs>QIp?2qL%$9Rx)Y2PY@LzsqIu<=%Yma_`+e&+n4o152^;mr&~+ zWArm4%#z3K04}fMgYmq@EQl}gB~;~u<>YjGYA;UkRU z4_sqbwm@5BK^N}lL>%?N3Dk|Ja4TNH5YA!`KE%!V4lm+2+=QpOXb0v|52|1*E~3^y zbNzq;o^L}gHj-wixL)~`)%Zm0XJL=>;D%urPRNi%sXrriTZ=s^Sk9yD&DzWdV^}k%(sg_$< z9F^=|)Vd-n*%GqZ?GEx+Me`gfqD9x2sDfUjqWy&GM2l(C{HSQVQP<6)qOBo8I!&lU z4JE3gcj|zl-?h@y*roTcNV}Nb`i7xSRi%cy+|E?>Dx{y;9Mt3t-kwvOURiT&b9W-B zMxyR\n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "gateway integration path is not set" msgid "invalid integration path: %(path)s" msgstr "invalid integration path: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "The transaction amount didn't fit into allowed limits:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "A provider to get rates from is required" msgid "couldn't find provider {provider}" msgstr "Couldn't find provider {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Balance Deposit" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | balance deposit" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transaction {transaction.uuid} has no gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} has no integration" #: engine/payments/viewsets.py:14 msgid "" @@ -206,4 +236,3 @@ msgstr "" "It uses the TransactionSerializer for serializing and deserializing the " "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." - diff --git a/engine/payments/locale/es_ES/LC_MESSAGES/django.mo b/engine/payments/locale/es_ES/LC_MESSAGES/django.mo index e13a053f996bc81ad8132197aa0becaa5a2b4d2e..d581a4e62a1d93a487fb5e0cbee011164a3fcabf 100644 GIT binary patch delta 2953 zcmaKtUx*h~6vwamcUQACQ%kLDTK-9YSyF+PA-b%V=F+YdzSwo<{&r`b-^?_3X4frc zh@gicBqVyM2gQew2&uIvNr`>1(5E1%7l~d%dWiBhsLz?1-*5jUUUq(;nLGF1bI$ji zGyBWBv(FSam(KZEF}887=K5@wQhVfnHb0DwbEu@Q&1=qoU;KNXJNDJ9!4DnsvsQD8Vhi<}6@Gtm0T(zhQs2?uEzBcMxCIb@(*=752iVE0G=^S&9CV<3T2Jn8Q*UC<@$$C|X8E`pWuP3*{YUQ;rQa zr8dN<7?dGJCPS1HXT^>*6(W@B1!_I^JL8G^PLybmC%M_mCEiM8k8?>*C0!f2L|$=t zGuJ&_qL!po2EKQOs3b#|zmBV3Xa8K_^j5~`JhGC@C+*-`c-CuXIxT zhHK(Ss*f3GeH}-o#e#(+fzL#HSz=PtvYAaAdVi*I#kVdPj97t_)ftl!*by7yejQjd zja%BDU~gnX?Z#YYTb1jz6~fR{ecLxs5JGBQ5=YLWkRN!6hDI*;Byt_6x@m$iPi;d@ z7e>66!$mZ0BR`1|eTt91O=1@?GnppW=q4nWCrO-&=qO%zsV&o_mZy?1RRS||%_BqdQck{3*jN2-@zA$+504(;MF@PaItDnMsqljiU(e^iB6CzjDmTVo9+D(euW~y`alxma@h^gW=K7}UM`KpvnDI}JO z3nv1yOK72Prp7ZaZYWW6Qp|QN980iL3(Y`22E;CX+6kwSfYWv@)nb>)OD4u?+qlua z+oyQQAE(o!oqUSFbqRLnXxnO+ym58kq&gI(OvbN-+)>#zbbk>@5V^}u8pQI&CVGUY zX{(;~<1Lym619}uaKz3~shw*&zdsNUtFJ@l52ZAWe$|7ccfB}Gt(O^B9$C3klo_9K ztjFTgXSz3(e;HD~)1z%D>D)WKPzRXl^d*A1I-!r%SV`J`f zb@@#rc5>EpX3NYD;OiCq5KmW{1@IXj=h-s0a2>2LTaSmZ5+k@4&terOu?@#?HO}Ed zT)=Jk1HEQB^Lq*%Lb#s?O{f6}QGYy&oAEMM<1K8&dsv5W@FIT08a&NQ4VXj?G>zr> z5Y_*2(Rb))eEUhGiwA#E9rrT*P1uFXXaF^#5#+G(qE}H9x`wTI8kSf^+)Igt*IodB&zdxvnHT%uNxDVTL z64mcMuE9sxkBg}PspTePTRY|)8hdEyK|gBkFJLXs<8^#dyzZeKtz3^_2i`zswuoDC zx#)M~FfX$kz&d1gEQ9KI1=rzhfcmSkzzt>k95u6-xB=hdF8qolYc+Hx32VSH>_lZc zkJ@YxkV3lqL-!ReoZ1iDbwOxftFK~*)?YIVaVlelHj&m}p$()NYhNgHeI=z(h6+~C zU3YyArPxwz=!;Tio#ORI)FxCCN;uHVk3#ERiXaVDL8YbgZY4;}-8_7KZY7$~jmV{F zDie)m6X}%G*LO60x4yDsCgQu}iKSEL6T|s`zNxaH9yswKCmD6Jh5oU`Qa+Whs`h$j r&V**$3Y|N8Pn|s0eIzp2bNEE}q%+}!hent3nM5|Nmow31JZ=90`$ljb diff --git a/engine/payments/locale/es_ES/LC_MESSAGES/django.po b/engine/payments/locale/es_ES/LC_MESSAGES/django.po index 9446f46c..c2816ea6 100644 --- a/engine/payments/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/payments/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -142,6 +142,10 @@ msgstr "la ruta de integración de la pasarela no está configurada" msgid "invalid integration path: %(path)s" msgstr "ruta de integración no válida: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "El importe de la transacción no se ajustaba a los límites permitidos:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -171,8 +175,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro " -"servicio de asistencia en\n" +"Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro servicio de asistencia en\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -193,10 +196,36 @@ msgstr "Se necesita un proveedor del que obtener tarifas" msgid "couldn't find provider {provider}" msgstr "No se pudo encontrar el proveedor {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Depósito de saldo" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | depósito de saldo" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Esta clase proporciona un punto final de API para gestionar transacciones de depósito.\n" +"Admite la creación de una transacción de depósito tras validar los datos proporcionados. Si el usuario no está autenticado, se devuelve una respuesta apropiada. Si la validación y ejecución son correctas, se proporciona una respuesta con los detalles de la transacción." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Gestiona las solicitudes entrantes de devolución de llamada a la API.\n" +"Esta clase procesa y enruta las peticiones HTTP POST entrantes al manejador pgateway apropiado basado en el parámetro de puerta de enlace proporcionado. Está diseñada para gestionar eventos de devolución de llamada procedentes de sistemas externos y proporcionar una respuesta HTTP adecuada que indique el éxito o el fracaso." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "La transacción {transaction.uuid} no tiene puerta de enlace" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} no tiene integración" #: engine/payments/viewsets.py:14 msgid "" @@ -207,9 +236,8 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet para manejar operaciones de sólo lectura en el modelo Transaction. " -"Esta clase proporciona una interfaz de sólo lectura para interactuar con los " -"datos de la transacción. Utiliza TransactionSerializer para serializar y " +"Esta clase proporciona una interfaz de sólo lectura para interactuar con los" +" datos de la transacción. Utiliza TransactionSerializer para serializar y " "deserializar los datos. La clase garantiza que sólo los usuarios " "autorizados, que cumplan determinados permisos, puedan acceder a las " "transacciones." - diff --git a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po index c7df66ae..9b166e23 100644 --- a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -141,6 +141,10 @@ msgstr "" msgid "invalid integration path: %(path)s" msgstr "" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -187,9 +191,37 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." +msgstr "" + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." +msgstr "" + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" msgstr "" #: engine/payments/viewsets.py:14 diff --git a/engine/payments/locale/fr_FR/LC_MESSAGES/django.mo b/engine/payments/locale/fr_FR/LC_MESSAGES/django.mo index 659e27fb51e0e396d3da9f58b899aa88632b5518..3c58e9f8a9ba236da8da349db14176251ea6f4a1 100644 GIT binary patch delta 2923 zcmZXVU2GIp6vr>0(iW5t1r(55MHgyWiAFF*QGyLciZr&EXiRX}x!VrR&Mb3h+7clX zAN0W&9~z@E8Zkc5jSnVZd_W@)lc+@BjIT8@F@_h78ui7fzcaJD-Ikl){mtIF_uO;- z=bY{39e+KP&aGemref@2Ze_l^M5#mayo?XV&gI3sU2u?hFTls)#T81e<^9}BrFO$# z;V|plZs82yPp?vH1Dt^@sY~!S_%Y;9UE`xqsZ@QMg7W?h z9Dq|$F1`%Ka0a)*Z{T`(1Ktb&fp54;9@xnKRr13{_f+#(0Mn%n`` z@cjw+7(51L-|KJ-d;>~EA3<^GGl=i%+a|w<;?Nx21%HG4;Fi@zK%;Oq_p6gUoQFOX z12>=?_#L`Px)m=Z@>gzED&+g;@KxB)ts7atysj{O9lpo<5^g=r`upfF?|+7()W1+1 zUU_?Q&qkQ;WnnuHlB?(7C_D`xgkL~$=$GdEzu_^y_n@Qfe;$hA8Wc$rC`!By_rnI1 zn)(U81()K@X7~<#0AAUM{txr;0}CSUhD}B8H#a!|#o&u@2-cv~<)=_`d=+w3%|ZUu zpL~#ZwT4@So1nb!g^$2T;ZYbsvZ1bSMt@XRU$WrC?;z!%p1d=!PIVNbXr4zoAobD9 z>}Se88KnYw0CFiJ07Fv@PZy^jsEN+v-l_)J$xmvOW@PTyc%{#shZXWMN}I z0yAj>+;0X}jl!BX)0_<)U)yswHnqa_<}HMwJAE4(O9>$|wjKu7ppffT5DkrNQjy4Y z80o6x`AKBTYN0UVwHO!CvX1_*`!_%BM}|N(@JFWH0iLa z9b&!dkansBq$eHUa|_?(Tw6BQ9F(f&))LE3Bn!e=I|=)OSOPL`|KiA7F{iRUGI0{2 za9JM@T9H>1zkMgUlKh)#Q%R(xur@E+lowCrmv;n895Jd} zzE%k@tmh>0+;%ZHE91lK%U0|q^v-*nT9}}^>$yQG)>Y&t38ALI!zn7p_iA2j2lUKW zt3Fs|O)ROkSAwqBmZZauu2bSBGQMvXUf#U#f(}agCheB6nl)MtbvT=ijFy&iO$}l4 z2OUvZ#-|d*Kk1W66Itz-@}4@x-KJ=&JOD4{t07612}4gVvNqpXi>(OlRcYK9FrDvOHQ#PyI9D3lfxYqB0177S7)EZSc}oh01hlBHM9vGCYUr++d2M9XBJdUoz7ul=q~zA=(f}Vy$QFBFm&U zE^?KZZPqB-6Kycs8LeE~45O^1NhSVb&&>X{UHgU?ZeQ?EsA$@D({xmuxzgPetUNkw zbPY$EC9~*eWUqu#@w?FSy4_Q((x`<3RHDPX&3k{4xL^oYX zjq0jDR5yceauF2-fn7+{MbLH7oly`$L=;rt-`V!C_k7Md?|aU9pXYt|bMs6j|1nr| z!-!5=D=p_S+lg-%a3G#7Gz;K!JWSskjB*{SHCu|iu?`cs1W#c-rf~zF$40z|yYLaV z;}=|HmN&n*JRpoa=!l>`*pGVg7`EXg2Jt4Y!6L4}cQ}gk*o-H5r~}ie4^3kYK1Pjy zTJb&l`M!PSq>GNygPn$T5@;T=?_bLhhlIE9~(pPg&eF?P}zTqwOQHC%+MD3H8xCK9>D%QrsDs@N2 zIO=^v91h?FvTf`YYUy615}XfE{}3ntxIr~6)Ks<|HJ}r>;$Bo~CsC!njA^`v6wm%* z6dPC%3h91C87g#NNv_oep?$55saU7=XWzKlEq8B~H<8v~p{!QZlx2*j?5jcYZfF9U zoJw1bRh1J}QG3LxTq`MULRQB316ZJ!gF-vJ8mfq@p*3U$Y#EIN-OZyissa(38;NrR znel;SZX}y=`uYyWAGFrh781U@-efj2G%{TJ\n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,8 @@ msgstr "limite journalière" #: engine/payments/models.py:116 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -"la limite quotidienne des montants des transactions. 0 signifie aucune limite" +"la limite quotidienne des montants des transactions. 0 signifie aucune " +"limite" #: engine/payments/models.py:122 msgid "monthly limit" @@ -142,6 +143,11 @@ msgstr "le chemin d'intégration de la passerelle n'est pas défini" msgid "invalid integration path: %(path)s" msgstr "chemin d'intégration non valide : %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "" +"Le montant de la transaction ne correspondait pas aux limites autorisées :" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -171,8 +177,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Si vous avez des questions, n'hésitez pas à contacter notre service " -"d'assistance à l'adresse suivante\n" +"Si vous avez des questions, n'hésitez pas à contacter notre service d'assistance à l'adresse suivante\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -186,17 +191,44 @@ msgstr "Tous droits réservés" #: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" -msgstr "Il est nécessaire de disposer d'un fournisseur pour obtenir des tarifs" +msgstr "" +"Il est nécessaire de disposer d'un fournisseur pour obtenir des tarifs" #: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Impossible de trouver le fournisseur {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Dépôt de solde" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | dépôt de solde" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Cette classe fournit un point d'accès à l'API pour gérer les transactions de dépôt.\n" +"Elle prend en charge la création d'une transaction de dépôt après validation des données fournies. Si l'utilisateur n'est pas authentifié, une réponse appropriée est renvoyée. Si la validation et l'exécution sont réussies, une réponse contenant les détails de la transaction est fournie." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Gère les demandes de rappel entrantes vers l'API.\n" +"Cette classe traite et achemine les demandes HTTP POST entrantes vers le gestionnaire pgateway approprié en fonction du paramètre de passerelle fourni. Elle est conçue pour gérer les événements de rappel provenant de systèmes externes et fournir une réponse HTTP appropriée indiquant le succès ou l'échec." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "La transaction {transaction.uuid} n'a pas de passerelle" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "La passerelle {transaction.gateway} n'a pas d'intégration" #: engine/payments/viewsets.py:14 msgid "" @@ -212,4 +244,3 @@ msgstr "" "TransactionSerializer pour sérialiser et désérialiser les données. Cette " "classe garantit que seuls les utilisateurs autorisés, qui disposent de " "permissions spécifiques, peuvent accéder aux transactions." - diff --git a/engine/payments/locale/he_IL/LC_MESSAGES/django.mo b/engine/payments/locale/he_IL/LC_MESSAGES/django.mo index cb89bf4410229535b494622e8323a5fa0cf768b9..cf5088c11c0b0ccee3fb88a9c2de1da55c3be87d 100644 GIT binary patch delta 2856 zcmZvbTWl0n7{?C+QZ6c1KoQUbQn^T12ni|(Mv({!1QLo5zTmJs+m38!mbtVLBokhY z(FY6NrBv6_R?-_WCXyJU55(}G2H%XCH;g=(@SsM0CDGq^W_Gs)r=9)HxqX-a_nn(< zzio|gwa%$3p3S@~d26$j+AZI+`QceVCtceB_ptUB+zE&0Dz%vPTMsJL4*!JvnO`-J zGmPJ9QR*?+51CTq@Dcb0IqXQNWF`ks%4O#B0P!GGauxNE*r3*g&O){n#OuosHs zFQFK|0awABuod2c&%nFzNvJW>4R^q$a1yS8*WqgXtJ{2#l$wJVIWRxtTKEv-SK!O= z0F-?nz!mT#C>dRW63{o0*wv32e})p!Ew};x1z&(G7NrRthKum8j`Hy?EI~1F2g-rJ zVF5{362*&*&pxbF596<432wpb66S{EhFYqN9qrZl~LyoA2+59wI1!cSw z#_Rdm&xc48!DH}4xCQ z^qeV)Oi7c;BLRu*(o1rwBp@lTJZtgac%IF^B(nM=b(KIQNN${J@Rf^kcN*GHg*PrM4c#1cdO;9Ftm81mnh{Wm*E3|v9Q~Gr1 zTW(Qt6nLKdycIL>$>c z80gT`VVA96J+v>kprgwPbiQN-fiC-A-VOo|V?+C16i&CZx1-~bK6LPKhZve+$0~EO z>^nrI%UNuMCUN-sm=)Ls?YYKd%*Gz4z(jpp+48M!JGA|r-WO^@DcFJ2>9T_$Qya|; z>>k@C{4BAe?{#bYBxhZ#q=QpIXm_WfXI@A{PmgVHM@$O79h5ycuu-Vs^ol`S~k*LMEh^B3~Q1%dgT8ss|>;(=p%`yeK1*8;2<+A6C=qMiNecO~t zdqr)L>wSl`RU{$ZW0jmj8k?MJ$i|$7Qbl7e3fPHct`}-6VxJpILUv)(y_wf@j%B-V zhmnuMIepNrXI_j-4WHCX>TjR4^O3X^)|#UAI$@V_J}pu52vLomGd*MqjDAfe^pPX` zUYCiD^%kDl&r#$Q8qJ(_#%Djwp1Y0Ir~9$Gy$IC{PQhIl>LPMe1W(i8UN0R}a=M)` z*slA(YZ++?>`+P@Ty^KaH!DtR$z(E`Ow9C~xjLhhzGN`Dlwvr!n4C{0k};+#Dj8yU zIjQO79Dn0jsU}l8sU!o*1vXW5GMs$EJCe@V+T~JdP7UC4T-GlnRUI=i%K3gdTV*hu zOfh88wAs90_n2&i(70Q;AHskH{i((<(TyhjBZ%_KldVYT8L5EUd_a$C+;(w z&#HpmQHe|1JP1lm6h!G@AyEfusTE_OP5e{;ff8|W z5y_C~Bt|VF1s5%fP9iQ+br6*|S=2!a)vc2*et$17hunPLefPcGd(S=j)%!kCm~W}S zZNyeu8*Qr2Y!7}|#uxE&xmh#5!Xd`yu#0}gXSN3Sp&wJY8js-$oWLGDk4<-FOeR({~uaFL(uiARilP zG~0q1JV7Rl7-oK3A`hRr(a77o=zrtwI7WhIt8gc7!u?)9gI)A5pmtorgo%JVpix4ixz?4{pCI{I)gYG)U*6R&wb zLjB$xX7MK~vqPb3oed)&yBZ?@DxxAi)?m}9l|MtR{59^tuc(Ov\n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "נתיב שילוב השער אינו מוגדר" msgid "invalid integration path: %(path)s" msgstr "נתיב אינטגרציה לא חוקי: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "סכום העסקה לא התאים למגבלות המותרות:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -185,10 +189,38 @@ msgstr "נדרש ספק ממנו ניתן לקבל תעריפים" msgid "couldn't find provider {provider}" msgstr "לא ניתן למצוא את הספק {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | הפקדת יתרה" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | הפקדת יתרה" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"מחלקת זו מספקת נקודת קצה API לטיפול בעסקאות הפקדה. היא תומכת ביצירת עסקת " +"הפקדה לאחר אימות הנתונים שנמסרו. אם המשתמש אינו מאומת, מתקבלת תגובה מתאימה. " +"לאחר אימות וביצוע מוצלחים, מתקבלת תגובה עם פרטי העסקה." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"מטפל בבקשות החזרה נכנסות ל-API. מחלקה זו מעבדת ומנתבת בקשות HTTP POST נכנסות" +" למטפל pgateway המתאים על סמך פרמטר השער שסופק. היא נועדה לטפל באירועי החזרה" +" ממערכות חיצוניות ולספק תגובת HTTP מתאימה המציינת הצלחה או כישלון." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "לעסקה {transaction.uuid} אין שער" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "לשער {transaction.gateway} אין אינטגרציה" #: engine/payments/viewsets.py:14 msgid "" @@ -200,6 +232,5 @@ msgid "" msgstr "" "ViewSet לטיפול בפעולות לקריאה בלבד במודל העסקה. מחלקה זו מספקת ממשק לקריאה " "בלבד לצורך אינטראקציה עם נתוני העסקה. היא משתמשת ב-TransactionSerializer " -"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים, " -"העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." - +"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים," +" העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." diff --git a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po index d3e3b3e1..b273059e 100644 --- a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -141,6 +141,10 @@ msgstr "" msgid "invalid integration path: %(path)s" msgstr "" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -187,9 +191,37 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." +msgstr "" + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." +msgstr "" + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" msgstr "" #: engine/payments/viewsets.py:14 diff --git a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po index c7df66ae..9b166e23 100644 --- a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -141,6 +141,10 @@ msgstr "" msgid "invalid integration path: %(path)s" msgstr "" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -187,9 +191,37 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." +msgstr "" + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." +msgstr "" + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" msgstr "" #: engine/payments/viewsets.py:14 diff --git a/engine/payments/locale/id_ID/LC_MESSAGES/django.mo b/engine/payments/locale/id_ID/LC_MESSAGES/django.mo index 37fe6e71c8312a77551c685878a1e53e22c03aef..0d23ff60e2ef2508317a93294b4fb5818be4c0db 100644 GIT binary patch delta 2861 zcmaKtO^g&p6vvAN6c$uO5tR=ML_U^fATffjiXpJ!TQ;&B^dQzw*Upwb(>-=|v#df| z50XesJZ#j92aHieIFQK2$N>{f)aXSM;|&v{2Tnvicrnr6>+ac^#l#9dzv}9$SMUAb zd&_TYf7zB_TRQJu#n{HPlIMdtO6`{UTz(iE=at_!!C}6=0H22E<}0;?@7HcqY74vx z53#=LcFyqr@&cvqfzyyB^(njyUWEKpSNIuFDp%hyS;WGha3}l+u7NujD%B5Pg7Q6t zLvRwx#h*bjd=;*O-@&Eu27DO)4IhLWBQ5wOTn5j>weSjD!~Nuthf%| z!TU4tDR>ylzO!%zd3nifU zA>ycyVJ=c!WFnFL2oJ&QP#oBLZ@KY#CO(++O-VcCH z@O8KwiXvaZ0r>MW^p{-q-B(Jx9?F5u@P0T9#p4&@6R-&-1)so2-~}iKf2jB?B%A6l zC=vE8FCASBW&dg@HM9rH_k20}%j7K<-hLL3@j8mNi&EQ2jC@o3OcXS&XRRK$T-4BY(`=5JdZ-ioN}gGtdY#5P zov?b>$o^XY=!EmS-Zb9pb`saE_Z-HCPU0->wX<(@bVQFFIXWtaX4x@qPPP+=SGryK zhHK(SqQ{K4fsUi%#+;2OT);wSTiYb2WmB8f^!`-iN?^TfMC`!H(ndD|d%{MzUj;Uv z#4T-4ayBwe?WcTdTczvOErg+aecLyh6GCErJC3|Xp}^G<4UK$Om&kRT=yBtkSz>Ey zwlLzg7#GpBje>TJ=si9LwjF!NN;gfu)=x-2Yq#S>L`U(wp4cKyIv&@CSpRcKn{fit zCrr}?rEhX>MmE+AN{tuRGS5yVi{ez9jD1lm0oh>i*2p_C=dwMqX_laHO&^Imk&kE1 znLEjqV53uc))BJMjna$~dz@UPuuUtR69eshY63k3d6j!;F_g zxsFbQ_=oEgGfD^CFV>1K>L}|14!E-qH_MM_%e%^yd7b z16fO?>B?MguEMHZ8AGfp-oUw6T||IG(`S}^v7ytJwUOtJ92nj`di>d4hlfw=Q=)lH LS!!>ZL9G4-QAg*- delta 1063 zcmXxjPe>GD7{~F)ba(r+yRD|Jnbo9jYC(h@DwFoW~y8K42UF;{me`cmzY3!u5C-SEGwN@d~cPCwK^7 z;dWfcwPpp21WO(2v6F@t)PO^%7mwiM5Lp(a>IV-F^<9mi4q z9wJ@r1@6ZpR^tkitNp`*);$<4W!QllxEnX2i#Kozm1&64w5AQHB}k$wmO=H;Vm;nL z-fd6u0KP``TfzkXM7^&zM*VfsN_{DUb)sgTM9s7p^+4Lcf7|yS&T{_&D#H#stKVUy zkly5!p+X6%T54BlUn>d44y`}?#+$V=P-qir{T13k+c-3Pl~&a%2T6FLiEG{UHI!qk zf1xi*2|E7&ji^ni>I67qeVi29;pK>Pp(<$8P\n" "Language-Team: BRITISH ENGLISH \n" @@ -139,6 +139,10 @@ msgstr "jalur integrasi gateway tidak ditetapkan" msgid "invalid integration path: %(path)s" msgstr "jalur integrasi yang tidak valid: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Jumlah transaksi tidak sesuai dengan batas yang diizinkan:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -159,8 +163,7 @@ msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -"Kami telah berhasil mengkreditkan akun Anda dengan %(amount)s. Saldo Anda " -"saat ini\n" +"Kami telah berhasil mengkreditkan akun Anda dengan %(amount)s. Saldo Anda saat ini\n" " saldo Anda saat ini adalah %(balance)s." #: engine/payments/templates/balance_deposit_email.html:98 @@ -169,8 +172,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan " -"kami di\n" +"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan kami di\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -191,10 +193,36 @@ msgstr "Diperlukan penyedia layanan untuk mendapatkan tarif" msgid "couldn't find provider {provider}" msgstr "Tidak dapat menemukan penyedia {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Setoran Saldo" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | setoran saldo" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Kelas ini menyediakan endpoint API untuk menangani transaksi deposit.\n" +"Kelas ini mendukung pembuatan transaksi deposit setelah memvalidasi data yang disediakan. Jika pengguna tidak terautentikasi, respons yang sesuai akan dikembalikan. Pada validasi dan eksekusi yang berhasil, sebuah respons dengan detail transaksi disediakan." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Menangani permintaan panggilan balik yang masuk ke API.\n" +"Kelas ini memproses dan merutekan permintaan HTTP POST yang masuk ke penangan pgateway yang sesuai berdasarkan parameter gateway yang disediakan. Kelas ini dirancang untuk menangani peristiwa callback yang datang dari sistem eksternal dan memberikan respons HTTP yang sesuai yang mengindikasikan keberhasilan atau kegagalan." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transaksi {transaction.uuid} tidak memiliki gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} tidak memiliki integrasi" #: engine/payments/viewsets.py:14 msgid "" @@ -209,4 +237,3 @@ msgstr "" "Kelas ini menggunakan TransactionSerializer untuk melakukan serialisasi dan " "deserialisasi data. Kelas ini memastikan bahwa hanya pengguna yang " "berwenang, yang memenuhi izin tertentu, yang dapat mengakses transaksi." - diff --git a/engine/payments/locale/it_IT/LC_MESSAGES/django.mo b/engine/payments/locale/it_IT/LC_MESSAGES/django.mo index 088ed055503564ebba3e50c616b7fe699f99fa70..9a972241d837fd1934b91ba3a6527dea6f1f40dd 100644 GIT binary patch delta 2862 zcmZvcON?c0QxpA8ci*{pz{>P|)pe^*o%5e_ z`sWS5Y;R31nR8Atw(+duIX_FOy)vK8KgQ-cWUw{|qD)k`0Pt8;63HUo4 zWPSC$oZAf2I9NAQSl}eho;~bcpE+oS1u|88itFwUmam`8b(kI z+=6o84;UipD!kaq`+N5*^(OD%!eX6Um&y8KrJjPHz~lUW13t}rKl-nLrywz^bC9Fz zA{6DWz}8kKUo#OyzrlX^H+&rKc}OYJsv1xt$>3}7!|Htsio>_zM)(&LCDx+zb8s6J zMIDp?--qJREH0CpS-A}TWir5mNIL-~_otzT7od224IY9&LD{$N5v3l3n;>_p!HNcw zb~Rq{UAUb0vv51S1b4%mkZh=B%h6vZ>)CY@22dit4Ex}h5JijVWuHVN4vK0bsf^wd zg=2ELI3z=gOojxomPcwynhFt$^a8a}^4}hts)Sp3=HcdH<4W0Nr>$bChWMoJW9ULAJLo@7{CMTPT!zH#m$6d%mdt1{areQOi1bQITxDwjbjmGT2$pbvyIaA>K4M#-M;M~X%RwV)25G8i$bBRAsQN`c}*hMKGAjKqCByI znkkHUEyhJOZR4=%5xvXD&^CSQSm~rG4SEPE&6`c1i0CNZswK8allFCOi1n^R+SCb1 zkDJJarEhX>S~k`UO4SQ%dCE>Ci+!d|&b~O4fNZ$+&dA#_w`6-_vphlJKp%|Tk=OHR z`c85s`M1YyEtitQT1T`AmyH#dcLhou8LClpMGX}RM!${{`tad_mt>)@UBWZ#InP}< zUCdQwT>4@5+-C^A`ySKqIjV;)jC(U(M{bhfH3jY`sF=t#T$b+8li$t%bbe|xNo{&H zUhu)J)<85}asS^*F;R~hOx5z(v>WOq(Ob2To^ff->d5NE)y5p}7AHD&=};_5+<4(i zZ_!q-N{5)TvBoixlEj@}6pLBIqr=0y(OcmXQ)4FP-#7~D= z_etzBAL#2J>1HeOqv%2L=q5EIW*ufnBd3d=ax=n_YO}GEa?&`OI_WHS0&EgPVVm;jV>WdQ@A&Mn^?9f?NxfqXD;@{&-cUY;)_5j zwJ#|Bxx+f9H2z9TC5NGn2)`@ZKuO2ly{-mlZ0qjA6>(6uVbuwF+%Bc7Jqvs0?H=rP z4f&AyyR8=TBvLPl889p+NRbfn$(&^ZFMzOQ>|hTqShi6n}gyTo!y<8cV<7dzmMcU zHB?_WVl!tGXRgX@H_k2KLOfn*=Eo;^khV7%r5>s=TZUa&i*a0v$8iy+a1)-zdYr~R zID>2PJ1#cMo6l2zAdDR}w4gd1M16P+n{gZ)@CHWkKCZ;KcpAUqa_r}&b(lhRG=pS$(zx|-lNy8u1gF6`hD(pnf=qPGHr;x+Wxn4#MXcAlT7HX!i(2MgpfnSir z2I|Z<;wTQ2$teudzx^T)p80{yv;cpCL#Ag=64%9MU zM3P}Mr~wwSA78rlW75j(1=;Pyh?gXyK5p2XsKlxW-nj2)p9=SfpF!k5ij$cu!Z48uk@I3W4)J*SU z6dxdoEbR|vN}>DO59(NPE&17A@05H8Oo$jCP#~Zy;rLWmja>UT%gWV2!?M)%MDw5dXF54 e?TZf{-g_u^!I^NnN5(SQWG>?*oNOXBoU#8w&}bn5 diff --git a/engine/payments/locale/it_IT/LC_MESSAGES/django.po b/engine/payments/locale/it_IT/LC_MESSAGES/django.po index 2d390d4d..4f083fba 100644 --- a/engine/payments/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/payments/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -142,6 +142,10 @@ msgstr "Il percorso di integrazione del gateway non è impostato" msgid "invalid integration path: %(path)s" msgstr "percorso di integrazione non valido: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "L'importo della transazione non rientrava nei limiti consentiti:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -171,8 +175,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"In caso di domande, non esitate a contattare il nostro supporto " -"all'indirizzo\n" +"In caso di domande, non esitate a contattare il nostro supporto all'indirizzo\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -193,10 +196,36 @@ msgstr "È necessario un fornitore da cui ottenere le tariffe" msgid "couldn't find provider {provider}" msgstr "Impossibile trovare il fornitore {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Deposito a saldo" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | deposito a saldo" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Questa classe fornisce un endpoint API per gestire le transazioni di deposito.\n" +"Supporta la creazione di una transazione di deposito dopo la convalida dei dati forniti. Se l'utente non è autenticato, viene restituita una risposta appropriata. Se la convalida e l'esecuzione hanno esito positivo, viene fornita una risposta con i dettagli della transazione." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Gestisce le richieste di callback in arrivo all'API.\n" +"Questa classe elabora e instrada le richieste HTTP POST in arrivo al gestore pgateway appropriato, in base al parametro gateway fornito. È progettata per gestire gli eventi di callback provenienti da sistemi esterni e fornire una risposta HTTP appropriata che indichi il successo o il fallimento." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "La transazione {transaction.uuid} non ha un gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Il gateway {transaction.gateway} non ha alcuna integrazione" #: engine/payments/viewsets.py:14 msgid "" @@ -210,6 +239,5 @@ msgstr "" "transazioni. Questa classe fornisce un'interfaccia di sola lettura per " "interagire con i dati delle transazioni. Utilizza TransactionSerializer per " "serializzare e deserializzare i dati. La classe garantisce che solo gli " -"utenti autorizzati, che soddisfano specifici permessi, possano accedere alle " -"transazioni." - +"utenti autorizzati, che soddisfano specifici permessi, possano accedere alle" +" transazioni." diff --git a/engine/payments/locale/ja_JP/LC_MESSAGES/django.mo b/engine/payments/locale/ja_JP/LC_MESSAGES/django.mo index a182bd657d5a6adf895a073bc37c22e1b4edff47..e16c9301aa51621eec94c62790c9ed688b3dcef3 100644 GIT binary patch delta 2945 zcmZ{kTWl0n7{?ECv9y2%aaU)SGF_D%q)c{+0G2m zQVLyIE~&IxDog1FC{RF=N*_qX3yBX#A9?U}dWj}PO?)!q|2sR|Z9z{u`#W>yobU4g zzSGo#2Pt{KZ%F8Cox z-?xLSzzUEYUjfPRZEz0wJva#*0G|Q>24{jCM#{mL!6{%XI1lUw=fXex1rsF2M!^dm z80&LBI3Dk7!B@ZyAnmIGXMuGfWz-H*KsQ0e&hGmB38aATflI*O!Ij{wap{CMgX7?z zeSpa)U>GC=10Wsv0}Mja*@$8t-t7sD-NF0U;3e=dyi&>5!pm0hJ@8koUk6{n`)5xw zwg~(ggemrq&pgNgaoBV)Mv~9Ngf=K(F{pvBfww`Fm5rH-&ER;DGFS-W6MG*d1uXyj zUXbiGf-iw>-~zA*JO<`YOMg#-3-Nw_8uVX_$&XkdN0Z@&49)~ex&r@wHAs#(fV6KP zNF}HR=YlOhzXK_=-#`lFFP|f4Fjj>3e2|pc3gQzxGz0q6q!|lG!ETToyn{xd$hU$} zR0f0c$^IaROYxv>N9Cn4pX#3(Bnb`bfy{Uo zlVx})8{9Y<6m>f_++sY4SKfjG@G(53-f}!ND6!0#=ufy$N|JgfMlxo`bC^7Zr_f(O z+2mD1b>yJ?%-&QiwL;m=Keh}-GnIf9(zU|U^x_^~rkGsQc}TO=QbVC{tVq#jyP)!quVS^ib z)Ea81sJM6&-?VXaF&P?WM~UEM#0ViO9`R#CXcULRw<)F?qXEjC>jp1TLgA>P7P8^OP}F3cMB}O!jOY-3NQ^-> zqMISCWXoh0<{~9C8j0uzi4MhM0YjB#;(7^Jkn1CdxKe_I_)aAp3Z`SDbAz&BO@UG+ z(puESPDrNd7FVL!r&*Mc8eIBt=9!#hwB1mxr~!ow`9>|1c}X-p=o7V~`m4LtK$Kbv z*0Q2igsd{@d`P0m!-8t)IoU(9z|b$N1mCh{{W@AG$h7eAevU>%!NF$sJLAl^BS*i8 z)Q9>}%JnEz4~Bx;B8!(mZWKZ1XmGs(9TN_fhb(gyPu$6A$}v@oN^5p%W2;8QoGZfZ z5^l9{nuT*tIH}EbGn7y?j^qz_F0)p^MKvzRaXf+ z)|S1i!mSf7vN=HKY$Sv~sI^}>XK3BIG&FiIbz;CpexJ(}_Y3#5un!97KyTw&;b8J# zsyHd()=L+tKw6S;CY|cISCf?5;J3p|UG6=85}W!`h`Bx!Z5yfMbvN`~IEHT-3F@Uo z)C#uR`&%ybw>(rgUvMS`A2=N!s5;`+o$$I)+jJB-D2>=j;n*mxyxvqkUyeq!%3$0X zw?itKSxPrcQn*#V=m;{^(BIM}l}mcJYDG?^jgljR#Pj*HVm)6q^j60ahH$P4w^8bi z;IpQM+bm687j|ub+aYP{;g~hkA1&{G0<)RJ z?_B!QQ@hz6i66#KooGA4sgaFvN;nDJlg|9S)R-0Nf(I^{Xs1KIaGAV zh%Hp%OJ<8|uXuaUEX95Z=WKe2i;w7BAorT!kljXe0KZ1{%X6e2(fr z?fMY|jBh_F)YGtl>R8A0*J3?tMW;{`>Oy`t=z0w`p;4^Cd#IJZK|g-NA^e8?taXXm zChWwsWO586jBmfl!#p>FJiU$jU!GRSt%2N&PP=v>&sZNSmBa4+*O;LG7WZQLax;=) zNep8b*5OrDhGtL;`+#Y6_(DN5{*61(Lu(Anz@)K8JeoAfxI`TtO1) zl-W%us`=M>(1H{?*E*PrD($~spqH2F4xtojmI_U7J(tc!4VS)>d}zfAcF);&eGU02 zcMJNWl#!@gUyVA1?3D2VSV=Q~3Z3wLlv2<>>(H4J8>gBa&zw4X!gmt{RgDZYrg;h diff --git a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po index 875f3959..48ae55ff 100644 --- a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "ゲートウェイ統合パスが設定されていない" msgid "invalid integration path: %(path)s" msgstr "無効な統合パスです:%(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "取引額が許容範囲に収まらなかった:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "レートを取得するプロバイダーが必要" msgid "couldn't find provider {provider}" msgstr "プロバイダーが見つかりませんでした {provider} 。" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME}| 預金残高" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME}| 預金残高" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"このクラスは、預金取引を処理するための API エンドポイントを提供します。\n" +"提供されたデータを検証した後、入金トランザクションの作成をサポートします。ユーザが認証されていない場合は、適切なレスポンスが返されます。検証および実行に成功すると、トランザクションの詳細を含むレスポンスが提供されます。" + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"APIへの着信コールバック・リクエストを処理します。\n" +"このクラスは、入力された HTTP POST リクエストを処理し、提供されたゲートウェイパラメータに基づいて適切な pgateway ハンドラにルーティングします。外部システムから来るコールバック・イベントを処理し、成功または失敗を示す適切なHTTP応答を提供するように設計されています。" + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "トランザクション {transaction.uuid} にはゲートウェイがありません。" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "ゲートウェイ {transaction.gateway} は統合されていない" #: engine/payments/viewsets.py:14 msgid "" @@ -201,9 +231,6 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"Transactionモデルの読み取り専用操作を扱うためのViewSet。このクラスは、トラン" -"ザクション・データを操作するための読み取り専用インタフェースを提供します。" -"データのシリアライズとデシリアライズには TransactionSerializer を使用します。" -"このクラスは、特定のパーミッションを満たす許可されたユーザのみがトランザク" -"ションにアクセスできることを保証します。" - +"Transactionモデルの読み取り専用操作を扱うためのViewSet。このクラスは、トランザクション・データを操作するための読み取り専用インタフェースを提供します。データのシリアライズとデシリアライズには" +" TransactionSerializer " +"を使用します。このクラスは、特定のパーミッションを満たす許可されたユーザのみがトランザクションにアクセスできることを保証します。" diff --git a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po index d3e3b3e1..b273059e 100644 --- a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -141,6 +141,10 @@ msgstr "" msgid "invalid integration path: %(path)s" msgstr "" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -187,9 +191,37 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." +msgstr "" + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." +msgstr "" + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" msgstr "" #: engine/payments/viewsets.py:14 diff --git a/engine/payments/locale/ko_KR/LC_MESSAGES/django.mo b/engine/payments/locale/ko_KR/LC_MESSAGES/django.mo index 830f65d19c939fd393641452fd727122cdc65f6f..fe2cdd260b42629489c894073a55a36f05e9401f 100644 GIT binary patch delta 2905 zcmZ{lU2GIp6vr>}VOtO=0-}Ii1O*DL=mRFGDDjIX8X74N`Xa;bv>n;btTVF|qGU?h zlG4_+WV>`JyQK{)ZDR>byEU5#0r3HiKAGs7jWO|oojWnglf(r7XLj}r;!W@V=6;@Y z{^#8Ew+$07TC>aM#TeQS^fl;-IgGtQ-*fSUws~HDZ43Ao);5%4Zty<19^75cSPgg( zr1it#F0c(G!&4w#{4KZ^`~h4B-T^m&|AJ3}9GA3$FM}(<3Gf;42Dl#f+3)y3P;4Ho z(1B`?8^OmgehqvDd=I33-Qa4l52T2`1j(VVLHN#o^!PJK4$XpFz`wwkz}1WL0qqAD z!9M#4AD@9ikS@3b(t*Fh03=-lFJ8y^#A3!yVtflc2EGlewV1z&A4=IzU>fr)Vf6)! zZ$tm(;6EU;!xm#e0j&UOyaBW}|e_GazmJ!&?{N2N>V;#*NUE)(?T3 zKm{ZNXFy8j1#lxc3wDBYSLWAGgLN1Wu7v&+=`BpqMFPa#?5@YEC-Mi@f@F9rNc%cL zNMh&@DWW+~qJxx2 zq|dF7_24#il#SbHA2q6tYIHJ4jf#vKvc=Y+lQQ(EAcpGZl=xVxu~t#@*k1(Dd9blCjX9$H&v?K5v4g zrKbed+(z%2y(5`&n{x3EE}f5O^ur^GT+ls@2hESQ4H=6N`}Ehy5^S+1BY=3*R`-& ze$U><#s=Q7Z+|0QRB?|K!pV@Xz$+f|e1mJ`ht3a4h8*CU>RPn0@rV+@L}6P<(xq0} zlyx7kH#uAh$cECaVh5be-%*M{J|e4d-wUis*IK!J6lYZ_$c!jRW=If=$)H4xGudYO*_Iiwj1 zW=d%?d^HHk2!}$NPNG9`%dg9Bnz+`)CB*vBAucr`Abvy&DuKLjbgn2H<|HW9XHxUD2w zn_{-O#>)al941sl&ABz?CK&pal;8&r)W1m+b%heHtmkl82^5RjtBi}^&z-*$p_ki{ zTD34#4=4e3lgXPPH{N`qUgNH`ObW8K*ld z&X41x(!6K!xESo`&Z!wEHbGm&;3?5PWA}8~Jt-eU+U?NHY4IGyL*6(>j^u3 zm5ZSPF?CraBV0_y?Mst5@13fldz=#)+Zv9G?);gNL~eSNauhZO*nm%BALbR=*@-8tr}6xhW&XOca!wVI2VZ#XJ}kRuF_Sx zsdmwUq$ap?9w~m<9v3H*-d-`*F3$ItOWQFih9<;te=ZGylUZ>oNimIK5bL%?vK`l7 zM?%UHSI{KG?R4BZ7q|NhSh+X g9-83L8dc!Ffw5svt6~l8ims}?SbW{lZ)(^52hB(G!TO= zEJcT~z%D{ixnO@zogyNGpe`X%cutO9?-{0))!~4FUcix%zotbCmUF!Ul&V7tk z-Y}w#vx#$}!mJBlZ{k8c*=!cUr+A#YSJ+CqK44ahN3jYsxE;^n797KaIEh>FE*`=A zxCg&ujakmZ!BT@b9;Tuh)!{kRhcDqSyoxcriD_KI23*C9_yz0m6ff2=hMmr)(9p$5F}{f+uw zn6#J{48nuKD%)?Xuwb0+kJ&?eF-71}^aPVEZ~q>Zy2Owt9b=hj_+LpgT) z8~st*BPn0jWVH#E9ex0doZzC+4lhSNH|!0!X~?|G1QT xbUd5t@9*tdY^n+rGNC)cq4DhS=t%Kz=vqbLc{Eu}$3nrvaQwEfDAXj9{{d-bUM~Ou diff --git a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po index de9513ea..6d09cd8b 100644 --- a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "게이트웨이 통합 경로가 설정되지 않았습니다." msgid "invalid integration path: %(path)s" msgstr "잘못된 통합 경로입니다: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "거래 금액이 허용 한도에 맞지 않습니다:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "요금을 받을 공급업체가 필요합니다." msgid "couldn't find provider {provider}" msgstr "공급자를 찾을 수 없습니다 {provider}." -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | 잔액 입금" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | 잔액 입금" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"이 클래스는 입금 트랜잭션을 처리하는 API 엔드포인트를 제공합니다.\n" +"제공된 데이터의 유효성을 검사한 후 입금 트랜잭션 생성을 지원합니다. 사용자가 인증되지 않은 경우 적절한 응답이 반환됩니다. 유효성 검사 및 실행에 성공하면 트랜잭션 세부 정보가 포함된 응답이 제공됩니다." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"API로 들어오는 콜백 요청을 처리합니다.\n" +"이 클래스는 제공된 게이트웨이 파라미터에 따라 들어오는 HTTP POST 요청을 처리하고 적절한 pgateway 핸들러로 라우팅합니다. 외부 시스템에서 들어오는 콜백 이벤트를 처리하고 성공 또는 실패를 나타내는 적절한 HTTP 응답을 제공하도록 설계되었습니다." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "트랜잭션 {transaction.uuid}에 게이트웨이가 없습니다." + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "게이트웨이 {transaction.gateway}에 통합이 없습니다." #: engine/payments/viewsets.py:14 msgid "" @@ -201,9 +231,6 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜" -"잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 제공합니다. 데이터를 " -"직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 " -"특정 권한을 충족하는 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니" -"다." - +"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 " +"제공합니다. 데이터를 직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 특정 권한을 충족하는" +" 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니다." diff --git a/engine/payments/locale/nl_NL/LC_MESSAGES/django.mo b/engine/payments/locale/nl_NL/LC_MESSAGES/django.mo index 6a66af0eec5d8d2b2012dd2daa39b3903b6c49c4..fed9d0160b53581f4f08795ffc21fd8ec4565257 100644 GIT binary patch delta 2854 zcmaKsO^g&p6vqo;aamCL5JA2y5amM{P>C8;6k)?+1Xfv$kwmPWu9`^t=eey{s-?c-VKx(gz-{m!xDsxgrPL679?JI` z+zOje4*n2|;m_f6cmd9bm*MU3Z@2_%jMU+Sa3Opbu7c;`O3qh5@<32(2B*k|Sp`?a z8+d;NJ_PqbS@#ND3SWg1(R)xF`V`{3`ljG_P#n4l*TLW5{c!1=c0l{#9L`sVcsLFN zCZU~*nNMJM4&=0Ab=FuxQ1Z-q@rw$y8o zt?D!+X7x5~$-)nK;HNHedj|dmSHmZ7R*JN$21HGD0!nSX4CUYpPz-$!Z-YNW&Q>$g zc@10)MbSs0g9jl?)VEN>OAFCoA|1G;E$t>K9&dq*;a(_?RpBr^1|ceDANA~ z<={V|I5fDZ%>__WumWy?cSEVM=Zf!V7NI|BQSUG@2|t1oX^GRMDg3p5nYPICQGwv)Nqy{?UE*>^=Q3`nu?|@S6 z616xeYDpKY=emwd(z2OLhA7w>qK*um-`i=Gc5g`~cg7|jMAlL67B zZPQHZV`*YSXUeG`g{5kH@`Ro+PKS~9!_-z2Bj41B3BABN=E_ms539Otf?(W~YdWzn zv@+{br_)HM6IO2@-CY_QoA8}32gW%aCsElt$7XEkB+Al$J0oLbqk44T{xLChg&h;K zGfsTG(sAJ%u8ALs9yiWTP$q&9uu8qu}MtbrZy?*-KoYE&pN*vvH~aDHhK}* zh7EDQ2&|Gsb#0HZH#C8ElPPYDBdb3Hcyj|D%ue1 zRhzV_5Rh(|!1vm|$-b^^%o&ub5yM$P3llqVSddP?X62X^n2iS?Zl zzOtUP%=fy*TvWzeUr!&nkI?(iG4&`zb&}ITZ6(!JYr|eE*}Ri%AZOH~Iw`lkLTuRNXk=@w4~iOz+iel*~gl>r86MbskIm_ezw)KnbQ5?f6JF_9*M!D_%k zP{9sG5&R2MP;e;)v6DK8B03b@1R`2wp-JRpg^Jfv3EjqSe2iM@NA%%WoW>IJu`{d9 zwqp_}sN@U=nBV?VhnxK1;ptsm-{I*Ne1}xYzTsLdAw%sCYTPnv3nG4!#Dmy@50GNm zTVxLVfKgmREvSi?={=oT+)Ag9P6H03GCYea)h*279InR}o^~*T-8h7*SOJyrHEhQF zsKn+mhVN11>M7$E45BK!Gf4e4@c>uKXr$t4RB0!12VSZC{v1`}1uWnj)C%|Tk}yV* zLb~UJ-E^aiZ=HwE@}=oq_f+~}?Y~N;thEA#4w3d>(MD5+l)YBmORENpazlwLDXq8~ zTBSn&C@sXHDK^klS$4wR+Tbu9g-&=iLUgn$9U3a{mR?oT*6{Ch5101Yjrdd|lS_=} zQ`w9&I(qofv(`HAY~1&xc08LopGqz)`)J4N1j_)Y?$-TJ_\n" "Language-Team: BRITISH ENGLISH \n" @@ -140,6 +140,10 @@ msgstr "gateway integratiepad is niet ingesteld" msgid "invalid integration path: %(path)s" msgstr "ongeldig integratiepad: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Het transactiebedrag paste niet binnen de toegestane limieten:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -190,10 +194,36 @@ msgstr "Een provider om tarieven van te krijgen is vereist" msgid "couldn't find provider {provider}" msgstr "Kon provider {provider} niet vinden." -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Saldo storting" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | storting saldo" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Deze klasse biedt een API eindpunt voor het afhandelen van stortingstransacties.\n" +"Het ondersteunt het aanmaken van een stortingstransactie na het valideren van de verstrekte gegevens. Als de gebruiker niet geauthenticeerd is, wordt een passend antwoord teruggestuurd. Bij succesvolle validatie en uitvoering wordt een antwoord met de transactiedetails gegeven." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Handelt inkomende callback verzoeken naar de API af.\n" +"Deze klasse verwerkt en routeert inkomende HTTP POST verzoeken naar de juiste pgateway handler op basis van de opgegeven gateway parameter. Het is ontworpen om callback events af te handelen die van externe systemen komen en een passend HTTP antwoord te geven dat succes of mislukking aangeeft." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transactie {transaction.uuid} heeft geen gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} heeft geen integratie" #: engine/payments/viewsets.py:14 msgid "" @@ -209,4 +239,3 @@ msgstr "" "voor het serialiseren en deserialiseren van de gegevens. De klasse zorgt " "ervoor dat alleen geautoriseerde gebruikers, die aan specifieke permissies " "voldoen, toegang hebben tot de transacties." - diff --git a/engine/payments/locale/no_NO/LC_MESSAGES/django.mo b/engine/payments/locale/no_NO/LC_MESSAGES/django.mo index 765746a642ea68b58e042152e122801a348f9bba..46f2173e8434e400b001b47af9fcf68b2728b069 100644 GIT binary patch delta 2822 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 J(S=~j*#-PgVjchh diff --git a/engine/payments/locale/no_NO/LC_MESSAGES/django.po b/engine/payments/locale/no_NO/LC_MESSAGES/django.po index fa433767..5364af12 100644 --- a/engine/payments/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/payments/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "gateway-integrasjonsbanen er ikke angitt" msgid "invalid integration path: %(path)s" msgstr "ugyldig integrasjonsbane: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Transaksjonsbeløpet passet ikke inn i de tillatte grensene:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "Det kreves en leverandør å få priser fra" msgid "couldn't find provider {provider}" msgstr "Fant ikke leverandøren {provider}." -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Saldo innskudd" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | Saldo innskudd" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Denne klassen tilbyr et API-sluttpunkt for å håndtere innskuddstransaksjoner.\n" +"Den støtter opprettelsen av en innskuddstransaksjon etter validering av de oppgitte dataene. Hvis brukeren ikke er autentisert, returneres et passende svar. Ved vellykket validering og utførelse leveres et svar med transaksjonsdetaljer." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Håndterer innkommende tilbakekallingsforespørsler til API-et.\n" +"Denne klassen behandler og ruter innkommende HTTP POST-forespørsler til riktig pgateway-håndterer basert på den angitte gateway-parameteren. Den er utformet for å håndtere tilbakeringingshendelser som kommer fra eksterne systemer, og gir et passende HTTP-svar som angir om forespørselen er vellykket eller mislykket." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transaksjon {transaction.uuid} har ingen gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} har ingen integrasjon" #: engine/payments/viewsets.py:14 msgid "" @@ -203,7 +233,6 @@ msgid "" msgstr "" "ViewSet for håndtering av skrivebeskyttede operasjoner på " "transaksjonsmodellen. Denne klassen tilbyr et skrivebeskyttet grensesnitt " -"for interaksjon med transaksjonsdata. Den bruker TransactionSerializer til å " -"serialisere og deserialisere dataene. Klassen sikrer at bare autoriserte " +"for interaksjon med transaksjonsdata. Den bruker TransactionSerializer til å" +" serialisere og deserialisere dataene. Klassen sikrer at bare autoriserte " "brukere med bestemte rettigheter får tilgang til transaksjonene." - diff --git a/engine/payments/locale/pl_PL/LC_MESSAGES/django.mo b/engine/payments/locale/pl_PL/LC_MESSAGES/django.mo index 6aa8860c0db7095358c3a003ee8d49869efa9cfc..2e77d1bce094c1a7bebe5d8c8fd3640b143e536f 100644 GIT binary patch delta 2863 zcmZ{lO^6&t6vsF=KAoSz595Xf{cktIEqr?d-U;7YXv}$hKY6Ax>)EHdUocmT3w-i7DF4>_$9mm{sdRTKjCsH7-_;g;KlGgcr82vS8%`ikqJSW1>B+s77utG zJe&8s;U@SH)O|0(E8xpeBYGdIL!Ux?H(w3-EmVh2!W-eQa09$zSwEm1a2fZTra*1N+Z6<|g(^;!$`zjG;#SCe##s09Epj2kYO% zb-e!!Rng_>{tCPmsv^gse*f-b^w-E1UDEex15}SUK|T05Bp4Imop3*-?#xlR2A+Uw z@Q(q{y0kCta!C5kDtI|u4{w3np{BA6RguG&qQ6d#vyj7YphkNCWyY+AJ0Xfzmyo{7 zsTFW7kDk+^`*f(JdMQCyLyJs@N`4KG+SR7gBGmNixK8sw9IFNst%2dtysA``LKXS- zP^(?#*A!`VngUhhbRMmT^*lQ8eRimdI;8sTr&Zg%t8x#=%}lQ5(Uj;w)he%uQVp#U zbHB}9Y1{H_p4l|mC{KJ^o9Zv_m1!F!^^&Byo64+yGh1yMH(X#X^35cjlE^k1yKGdK z%staBT*!muUh-)t_l$3=Et!~3f>3)&^$Y~ z#mQEd;FYunzTuksk;yI_Tr57VZtSvgcM`KO+}5(0ZMxiLHQAO6uEZ`RQz<)evTtK9 z0=L_xxIYMNGV@JwdpMighJ<#=U9<1{;1jsH zOeSs8C^ANiJufp ztp7SBc9MW(w{0YG-#0xsD;sMTr6wzDMPMhAr9Ky1urJLuAQ!JaHS%H1UEQ9!yvR_v zCS&O^^2wqxdndWl{JT9aDzv1qHYZw{Tg-#Xc<00!3vVOz(R*yu7pNX5ak@H}N#rI8UMO&1QZbFBndD)k95}w{ z?M1=mn%ZzEUHsx{-FvCBx}AUP;G(^fCQh1m*hSGyV#aob-V4Q4F{9FV+R?O+JID4% zPI`xr?T>AmSm~6R&r>I{AM}xxI$dP-fXhppb+9P)#AR6N{;!$2uELO~tjfg2I5Z=^ z??W=zQl)s>B}xkMTpM!c9iO&k&_nbZQMPOHgnsM2fRC2KnQ`^J>r0zbZ(K37+KF+| z_4Y~GEO^23-3UOI#BI(n#-jw{n+ujg4O)i24cBb9;q0Suz)B+{+IEJNLP ziWwDhMsOz-b-GR(#V$<&p`)^6M(qs6Bm(Y3?pBf3bE*5@zQ~vDstZS>=~qde+*M80 zY3J;UrfW<3ne0}n%u7$mn(hDEj!!Kwp_SRPa--l?UsB&Y7|q3r;KWT0sCn7$dIuYc z6urakyzcR|URBc!e`cj1l@w3z8flj{YOmFrv5_XC`aUO?oy~mjlbVdH{LMCoQ+z6` zzXTdsLaORMMd)Hg^;3-XJ|ROAI#I_>9X&)|n+efw*8e+Hotn{B9EpF>rhGf4JNiAT zV$m8}SoK4vFa2!crUy!&+Ytl(?n%%gO0?!ea_n^}aj;YRMqjL|FKslv@xbTj9b7$Z e%-Z-PW81gfH}TZN_dK*^uRJ$QoCMp5t@#H9n*c=s delta 1063 zcmXxjUr1A77{~F)+Gg3N)Bem#?Ub`L$+`%nvMADvG*e<$P-cf&wpvr#2`r3}7u`fi zNkIiAbP+)}AxMEx1ffJ;1Q9_Hco)=FbY%p6fAj3&y!)K9_nf`Y^PG48cHF4VeXj`I zGoq1E#qf&E_Ta}Qd=Rgennm$79%k+X)^i;TnytkBSd0lQ!&A5n)3_C{;0m0;efR=5 z;!i9w%UL9}cta)bW+IMSun+aaLs*T&Sb_Jk7N6rfoWo1_16SiQ9@>Oy)Iwtzz?Z1| zr+hzQg!SzgCoN1Ypl)m?{q@*_s^|nNq4UULSA9oO3Ejd5e2l7e7Q^@%M{piF?DTT8 zEjWPvbaD*KSl|B8hckQ;;AwT>EKe(e31rHqu@q-e34Xzy_zm?6q7k!JjAK2fkY?Cj zP?80ZLLgtZL?KkGs$_0O-hE=w4y&cu6Uc7_Ds7gy{hvuuX2|G{;T|*_DLp}Eh z%W(?#;w2C85}?_peq}GPIyVn@H6tw1GA-RAmFBkx>YW%7+qD@_H48 zsPRwqk5Yk-f4v6PAtkMjM7#M=XonXf#)-P1O+)8x6+`XR=HcI$-&}FbN8+-Z$+}4| zHJEXFdJeTdttt+VC&Euc$-&II)WGE5@Xex9O*mfu&Wp(llW)r32FIsk59=21Y3e@O e)!ue6(RbuPXWMmW#5q3ne$@3`C+nvBUHcEYf@#?R diff --git a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po index 1c81c2f1..b073aa03 100644 --- a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "ścieżka integracji bramy nie jest ustawiona" msgid "invalid integration path: %(path)s" msgstr "Nieprawidłowa ścieżka integracji: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Kwota transakcji nie mieściła się w dozwolonych limitach:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -167,8 +171,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy " -"technicznej pod adresem\n" +"Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy technicznej pod adresem\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -189,10 +192,36 @@ msgstr "Wymagany jest dostawca, od którego można uzyskać stawki" msgid "couldn't find provider {provider}" msgstr "Nie można znaleźć dostawcy {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Wpłata salda" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | depozyt salda" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Ta klasa zapewnia punkt końcowy API do obsługi transakcji depozytowych.\n" +"Obsługuje tworzenie transakcji depozytowej po sprawdzeniu poprawności dostarczonych danych. Jeśli użytkownik nie jest uwierzytelniony, zwracana jest odpowiednia odpowiedź. Po pomyślnej walidacji i wykonaniu dostarczana jest odpowiedź ze szczegółami transakcji." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Obsługuje przychodzące żądania zwrotne do API.\n" +"Ta klasa przetwarza i kieruje przychodzące żądania HTTP POST do odpowiedniej obsługi pgateway w oparciu o dostarczony parametr bramy. Została zaprojektowana do obsługi zdarzeń wywołania zwrotnego pochodzących z systemów zewnętrznych i dostarczania odpowiedniej odpowiedzi HTTP wskazującej na sukces lub niepowodzenie." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transakcja {transaction.uuid} nie ma bramki" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Bramka {transaction.gateway} nie ma integracji" #: engine/payments/viewsets.py:14 msgid "" @@ -203,8 +232,7 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet do obsługi operacji tylko do odczytu na modelu transakcji. Ta klasa " -"zapewnia interfejs tylko do odczytu do interakcji z danymi transakcji. Używa " -"TransactionSerializer do serializacji i deserializacji danych. Klasa " +"zapewnia interfejs tylko do odczytu do interakcji z danymi transakcji. Używa" +" TransactionSerializer do serializacji i deserializacji danych. Klasa " "zapewnia, że tylko autoryzowani użytkownicy, którzy spełniają określone " "uprawnienia, mogą uzyskać dostęp do transakcji." - diff --git a/engine/payments/locale/pt_BR/LC_MESSAGES/django.mo b/engine/payments/locale/pt_BR/LC_MESSAGES/django.mo index ea71e1cc1ebb2dce787a80cb00afab1cf2057d00..5998cac43a04f59a6d175a5e301836a9fd529143 100644 GIT binary patch delta 2940 zcmZ{kO^g&p6vqnzVHZ?H1>{2tL1A$j0V5hzbb}j#h`W&?CLYAv?wZ|(nXaL$dv}T8 zL=!!j5D!G-K@CXEhIlZt8e=peaZJ?cfs5BY_;J9*5cO)Jzt___TKDt<`Ti_YUl$wG!!4DyS>JtC9D%DWmaI=JoKj9wuH{1aC^eEK}pNI1N z7~Bmfpd5S=%EnE&4t@uh!z*wj{0pvznoVl(A$S|S0PlpC;0DfDKXOA-Y5}Lnf}Vn# z;0^qK6g~_OLV52sxCXusC8H0Z1oSy1cJ+P1AD{#@1N-3b@Bz4HX)B>aa4F}jBix*X zRVW)=fwJHa7$WIfqPU;mFWsori~Rl+z5;h~s!06B%}VWnm!W6=I!@ir?{OYVNv9xZ ztFNF0bQvO!`Uy7rx%rJ7_Ef8HRcZkC!JY6Jq^#;)D9_)AW%w}^WqQz4O0W`cfa{?g zFaRHfWq3P04IP|9)L4YO3=5m)np|| zEb1A^-l__zrh2*HX($1_1tp=2P!jwFiXxj=p+73C`&KD62_J(J$Y)TL`4XaNo|P<+ z=p|EmCI`vb+(I6h$SMKJkS3EM%B|;;M8s4QsFYX6CaHgW++EyA0PP_%ZR3(4ah$q~ zOS)YeZVQ)WCnea*bsd*9q|{ypv3CZokq=!^$|_1Xq?6m@UT*H-l9I?k?c7SJl@HoP zsV7WoC(H@`LYkP^n;?x`TpDdnp3-B+>)7ciPVH!7+?N8=3W~*QwL#nAHQr`%As$vB>M7YP{F=#0A!S7PE&=T$aw=XJ5HItcQmVm1U!@ zeN3H|^&}!HT`yuIG>Ie8BgWfMyEs3w!HeTj$VB_Kx=BpUrZy?*{i!CD(E4aJ<_&^u z?J=8y9k(&z7l~C8SJQTqwXvycf5NA>)(X8ig*5cs*!Gnhq>xx&cd@r96h;A}p^?u5 z$y~ccS4>pR5?fN;!bsGzxrnB19M&D8&xtX#b>|~yX3OMDy`fla^w)SMr_BrirZ~I`_mc=FFuM_awO-dH*!#R1VWMr?ILl z^@;$lVx@56Q*3H=^Q;c|l;sT|CuD@4?=d^o*@3SMTT$tjU5hoM85QzH{z&Z`C4I3j>eG(@3yQPy8isU+^!x_O!?BG=A8`54F76EQl+3fqSdi!g-y~tQOB=B}T9sZ(tRUV;kPbZTK9|;2S)M z8@SahYk`VlgAktLMkA`jVbmW_U>K*c2A^UBzQVou5%1zR+=W+p=n#&hI+{f>RKt@De;;o7a(!c#ChZGm8c={;k8J^awSVaBdDypM3 z3)KDB7{PbQX4PC|t`^3uB5LA59h}E5ypDS?he=#SMHeQHcI?6qjG<Ljp$ZnGMY$5N7C_R z!WkOs?_H>`^yMP{XB8vK#O?T4{-1xwQ>z diff --git a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po index c0662331..4d403a10 100644 --- a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -141,6 +141,10 @@ msgstr "O caminho de integração do gateway não está definido" msgid "invalid integration path: %(path)s" msgstr "Caminho de integração inválido: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "O valor da transação não se enquadrava nos limites permitidos:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -191,10 +195,36 @@ msgstr "É necessário um provedor para obter as tarifas" msgid "couldn't find provider {provider}" msgstr "Não foi possível encontrar o provedor {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Depósito de saldo" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | depósito de saldo" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Essa classe fornece um ponto de extremidade da API para lidar com transações de depósito.\n" +"Ela oferece suporte à criação de uma transação de depósito após a validação dos dados fornecidos. Se o usuário não estiver autenticado, uma resposta apropriada será retornada. Em caso de validação e execução bem-sucedidas, é fornecida uma resposta com os detalhes da transação." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Trata as solicitações de retorno de chamada recebidas para a API.\n" +"Essa classe processa e encaminha solicitações HTTP POST de entrada para o manipulador pgateway apropriado com base no parâmetro de gateway fornecido. Ela foi projetada para tratar eventos de retorno de chamada provenientes de sistemas externos e fornecer uma resposta HTTP apropriada indicando sucesso ou falha." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "A transação {transaction.uuid} não tem gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "O gateway {transaction.gateway} não tem integração" #: engine/payments/viewsets.py:14 msgid "" @@ -209,4 +239,3 @@ msgstr "" "dados da transação. Ela usa o TransactionSerializer para serializar e " "desserializar os dados. A classe garante que somente usuários autorizados, " "que atendam a permissões específicas, possam acessar as transações." - diff --git a/engine/payments/locale/ro_RO/LC_MESSAGES/django.mo b/engine/payments/locale/ro_RO/LC_MESSAGES/django.mo index 56c764b5d4060923c776a072641bf59786e101d0..bfc4e60f40db674f777819d3c7642223c9043d9d 100644 GIT binary patch delta 2893 zcmaKtO>7la6vr<@wJjis2r8hrf_#=IsL=!vL!eLyNF#-Xn|hhKue~yF<~biN6v&Hd z;=({QK|_cVH7=Bx_{C16ENEhlx?o{kn6Pli$`7_A`a3i8-fO{l)BAoickVs+oc}oo zzFhg;=En6!bKX&mP0Z!Y_hu=zQ=Vt@!&p0~__hxA@$Dt}9Q>d|sfB#Mez#H^;U926 z>nrZz4DYXWDs?|R2U$`d!v*kj$e+5x&w8aAYKn)sEZl_K;XkkkZtqg68@>$X`!To$ zjzPKjD=3Dq!WHmGxCq{WE8#8pFw_{S!L9HCcnLlRufQJeSHJT>P-+gh$bqhstKfXz zpNHGv0Vw<4fXm>UP$K#iibLN(d{;k}`~`|b*Wo(&7km~jn^y#M2+revHN?Xy7(g*_ z1ImHFp^v1?@uI@}YxgQO!TT3*2tLiNi&=mBz9I#e;2G9`g`$*?{u0pp5HZx(5R+=M ze7^=8PqFYD51dg8u(liaz%_6Ll2-K=lnBqmeee?~`)@)?K?k}@3g$ymWCPp`x57tZ z4W5K&;S$)z&*M-pL4Vn}n+1{fIFtjYOJ0Ox@LSjqe}=Me$!a{V-p@cuCbeVcgg%+Z zCQOW%x+ts+7mKI$h)Hx9X&0t;I5zT4^_$QSY{Hrs)m%8NJre{+jdx7P_SHsalQhw3 zq|*_rcMR;UbPtZWM0Oe0|yTcilG^HOr4YU*x{9~ zm%ibe_z~-)Cb7Pb!u-Yt8%LebLUUW)#HMCb8&~w+RO5XFtI4)I}g#&D9JpDTt~648W&`- zt*Dv8h}U9VMAJ6(>k*<)^U=5UC~>T`)09-Y2`S0y^(Yq6QM}>BHcyj|s@f3i9f!23 z5|AD>f%6OBoo4$qn- zmEE)wAY)WiVPNV)!{Kyny{UIwR+A`jp5sJry4_q&!`|dXiciCZCnhFAt={q?NoW@0 zT^hx`x^8K+aihy-VsGYJ9abgT4L5GmiteLD=$_EC^-O%NQ!z2Iw{FqWVXnrqy(8X8 zK5-ru2s&}nZno?{tEVowwmG?y8+8`ycya3ll!+`_qw8&WCbMl^N-jf|htU*j&VbQgwmGQ8AQ^e#i5G;I>N1` z$g1>YZ?ROg9`U!7L717@tmyq_+MS|n(TTagURFv~8f?0P!A7aISj>nc<)09#+O{m# zRg`oh4KrgkZ`DEo^Iwfwwny2R>WH&rhiuwRce6q->$%rDwjD7+lzTe;T9G8#X!O<3 zLeKd8M>9nhlIIk`qj347g~M z;6ilKKZ7RS#w=_8(tJQA9^gh8HDEvL#Ur>4GgyJMSd9;G3%>Ild{D+F`AREPXqY@boP=C!?mJ3whW{_goZPfMqxDOXmrTy;u7c-oDd5bDEfnl6P z3Yl9UdY@V?UF$)Kt7%===Z?&FYyMTLO8RE^q6XIdt7!o#V`X1QZ=e^NzEDjGD>?lQ zg|^*2&>y8W;<)FkqNbLaFn$0F^srOYG!$Bh1AUbi4VAYbUFFi;^7rM|g1$D_A{V2{ z(P%6kPbHnczGH3os>(dm5#L;CER{STA6oeByH*s`4JVp#(gcr1V@o&VgYkv;\n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "calea de integrare a gateway-ului nu este setată" msgid "invalid integration path: %(path)s" msgstr "cale de integrare invalidă: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Valoarea tranzacției nu s-a încadrat în limitele permise:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "Este necesar un furnizor de la care să se obțină tarife" msgid "couldn't find provider {provider}" msgstr "Nu am putut găsi furnizorul {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Depozit sold" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | depozit sold" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Această clasă oferă un punct final API pentru gestionarea tranzacțiilor de depozit.\n" +"Aceasta acceptă crearea unei tranzacții de depunere după validarea datelor furnizate. Dacă utilizatorul nu este autentificat, este returnat un răspuns corespunzător. La validarea și executarea cu succes, este furnizat un răspuns cu detaliile tranzacției." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Gestionează cererile de callback primite la API.\n" +"Această clasă procesează și direcționează solicitările HTTP POST primite către gestionarul pgateway corespunzător, pe baza parametrului gateway furnizat. Este concepută pentru a gestiona evenimentele de callback provenite de la sisteme externe și pentru a furniza un răspuns HTTP adecvat care să indice succesul sau eșecul." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Tranzacția {transaction.uuid} nu are gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} nu are integrare" #: engine/payments/viewsets.py:14 msgid "" @@ -207,4 +237,3 @@ msgstr "" "TransactionSerializer pentru serializarea și deserializarea datelor. Clasa " "asigură că numai utilizatorii autorizați, care îndeplinesc anumite " "permisiuni, pot accesa tranzacțiile." - diff --git a/engine/payments/locale/ru_RU/LC_MESSAGES/django.mo b/engine/payments/locale/ru_RU/LC_MESSAGES/django.mo index 80c9da387ac39d6c0245e51fec5217d405dbd1e7..868c0b164971e748b68fe940057f546c4a65b723 100644 GIT binary patch delta 3397 zcmaKuNsJU#7{{Li$|}m@#^PfU9E27k0fLGmOav7n&TuhCD7tHglAfxzs+uK2+8M&4 z7&uH!j4>*D5cJ?o&$QFCVq%OMIaHD8k%RH#$?f39M1S9_>Yf<{N_u|py?XCk{@?d1 z4n6$Urqb0}6W>uhtNG36_x>$PZIST={_s3BF?rVj8+rE9xk z^Q#uW$+c2i^}gM%v(Ga4x(E7sE?%5&qTB3`j~%#ETr5l5#1W z!Td@1INSkc-&=4VJO?GC&!Ge~2#H-?PWdC0fUd#@_y=4M=S@!%YJ$`8ul6uF3iD75 z{0im3pD>4{^NB)A(td|h@7=1@H?Roz-lf!itp9}0Ps88gG1ecQqg0l8_uWaRbML_s z^9@jxX@rIGnz?439AX9ZD%)y*D{{5lY5iLJwYnOX1Ua7elR3N^=lu*bOD1 zD^N-~7g_t^dbkGu0XM)U^U!|>gO{-`hCYMxq93k{2n5bYFLQ=GT5|GsSB_Pih+ONS~!iZD(2BCMMXqYC6TZ8Ji>s)RVH1ae@w&B4(5^j zte&w#`;c`+zaILQ8(7)U@!U*nvUp7Iw*u{Y+Hpg>)wkrG+Ge@AydAKX_1YY_RcEby zexH>+pndzbQqc~=K!=_V_uG2&uI-tr&HJ4|XY*DN=z{NM?I7SVHni^*!?AX@H8=0l zyLL7;i=lCLtO6$szC%>Hkj6%65{Iw%S%IC?o@+do*m%&%u~6Gquzah{4sAc9w}+Zg za(3Xfy6hmx#Kvd__Cebv{4}u^-)qzMVa~c%UI#~l&~8gYPrZWwcB|W-2KK z#X`aJMRXJ|WqsR}Nqa5YBG>;N(pC!z>4R3@$tAJLxw>quSt!+FtQ7-xBAM%j+A6Zo z4J9EvxANM|YdM!>yKjd@AB8h|r(4UsrI@e#q*hXY`>>rYN=spFRJ21*xZgM*lPGzF zs7BA39x??+zfmRh?%mtB%EF3T3y<&TV$sRfn>p=_PrjcpX&tGL^<%YpMO4o@Id^%e zTacR~c$x%2rb||F{dfX`|Zz)9=qQUrV)HmL5>gt$|hNFs( zs?ktXi7Ii242RRQCEDDc~wOpMBOrtx>@Ro&qQU$W_LM05sgH>@wxa-c4DcI zH<#Eu61T@^bTqOoIf=<(Hugj#Ix1tJj|oO}G?3iI&h}|@OCvY(Qk5_hyImX`jL%)) zd;OxWx;Bmh9k=6hggDA_mgpG8$K$gEUWta{<2oASpMCKu5*lE=ey=44GQyCgf*EZx ztwg;h+YTZmHmnVs4JOx12qwZIFD4o3_;gZ_s4Jt@rMqMW9YJ5VHq2gr@RR|0JvPgbaBM-80678j) z*UPd>a5t4zB#@e{5=V*fQP)aM6a$iK(nx6udZGq;LnNju?Sxs80ILXUs$bzyuP75A z&nUWO_0|D&k-$&Uu+&lGVT6g4Oukg9ct-th@lQL(?Xp}EH4wTQcXZx0ecp3)(@<2+ zOiio7yI$GF$uIF=Yju-oA1}J_YFd4qB^F1b{?2&joRTPp!*=O~L_E_i*pt%TP|ab= zNydo-GoeA=F=i5rG{f7qi$k&%nWy(RxpAjuO_!4UXXM7EbhhM6FA=tBO;g<}wJjSR z%Ayh1z+7qG-L$AlyVa^mgdcL6hOE`>bd)hlT${LjWRj~d!3;{}jE+^2Y)$$~a!)R& zbbZZ9t!&J@lvmEvX+!)ccipt1sAIl^iP)xl2l3IHeh3+(8l@;p^*AG95G*d(fiDrBn56|b tc78JFm$kJobY|C!JD+Xb(!A$|%{v;8>7!DS0k&h?SmSeRX2Ws2`VSU~RFePz delta 1079 zcmX}rT}TvB6u|MbwQAO`+3uFws!e5O2||GxWm4uo6!}r^Mh}t5Mkd&9A4Unvl9VqA z7Hc0*6%;yn$=+5w65pJc(a%IUeGpHQ0+f&?tIw61DwP z*Bts8U%qqGz>D9g4eObH7#mPmbQpC)Cy+z>U58L7bOkr!ZPb;%K_7m?0sMj-aj4!{4!yw@<;_Eo|5x=v7In<7VMb3&XtM)A3V^Gd?6>KVO&MM7Gv0o9CF_^iw~*4NB!Xqe;&v`tGz#;jgd6sT*)+O3T{#gqn}@&8 zD)zo GLjD258GG3P diff --git a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po index 354a04b7..f2f8fd55 100644 --- a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "путь интеграции шлюза не установлен" msgid "invalid integration path: %(path)s" msgstr "Неверный путь интеграции: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Сумма операции не укладывалась в допустимые лимиты:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "Требуется поставщик, у которого можно п msgid "couldn't find provider {provider}" msgstr "Не удалось найти провайдера {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Депозит баланса" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | вклад в баланс" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Этот класс предоставляет конечную точку API для работы с депозитными транзакциями.\n" +"Он поддерживает создание депозитной транзакции после проверки предоставленных данных. Если пользователь не прошел проверку подлинности, возвращается соответствующий ответ. При успешной проверке и выполнении транзакции выдается ответ с деталями транзакции." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Обрабатывает входящие запросы обратного вызова к API.\n" +"Этот класс обрабатывает и направляет входящие HTTP POST-запросы к соответствующему обработчику pgateway на основе предоставленного параметра шлюза. Он предназначен для обработки событий обратного вызова, поступающих от внешних систем, и предоставления соответствующего HTTP-ответа, указывающего на успех или неудачу." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Транзакция {transaction.uuid} не имеет шлюза" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Шлюз {transaction.gateway} не имеет интеграции" #: engine/payments/viewsets.py:14 msgid "" @@ -201,9 +231,8 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"ViewSet для обработки операций с моделью Transaction только для чтения. Этот " -"класс предоставляет интерфейс только для чтения для взаимодействия с данными " -"транзакции. Он использует TransactionSerializer для сериализации и " +"ViewSet для обработки операций с моделью Transaction только для чтения. Этот" +" класс предоставляет интерфейс только для чтения для взаимодействия с " +"данными транзакции. Он использует TransactionSerializer для сериализации и " "десериализации данных. Класс гарантирует, что доступ к транзакциям могут " "получить только авторизованные пользователи с определенными правами." - diff --git a/engine/payments/locale/sv_SE/LC_MESSAGES/django.mo b/engine/payments/locale/sv_SE/LC_MESSAGES/django.mo index 47c84f0f038e899b1663ce36e7b7fad639ebc458..720dc254485cac9cb420a89c25bb8f48852acd29 100644 GIT binary patch delta 2857 zcmai#O^g&p6vqo$l-)%|6j1pp5an}5{7zPc5FoG$?nV|&)C6m%YkHgM>2AAvb|F9} zCWJ%}8YSL5U}QDM7!wJ^!~=&hQG*9Bcw7@hOgQ;b?Ja zulMgYZ#~kSTGaENVr=1B&h`ErrFP2mTyBi@J;l2Xa5wK>g3rLS^ORc1`>9)%D#2gj zKIT{4#vXnjnXlB{@C;;1eGKn}pF{rCC2kv)YN~H}=x5?jxDEaTSHo?+O7+24p}eob z0XPBW;4h#UZow7sGF$|&!3W@Vct6w_sl%t?V)zMM124hVoUeZ7fuK|mr^trhHrK-2 z`Mn)(h5MnbdlN2$Z$pXbQz#C71@T>d-{uu44o$%g@OStWT(+PH=m1>6`RXtaCtwK0 zz%?iv{(v5mF2{?<`2G4FN}cBS1vmn?a;ixD&Rs={CgCaOe}o&Ef0>u7;Au#9)JKq4 z>NAKh>Jn@|%)@0KB+|d&cG!DQ;lLmii5-;p$KiAE4Tulw3KT?)LqdX^Sa zFM;CF21xqV6Occ(o!e&kB9s76L0R|p(q?hM4@{h7VhU2&>J{AH1V(~jkPnGahA1V@N+8lyqJX4V##+wrj)&S$QUjeKPL#MPh1{_Rp;WsR z+66zOI-s95t1iPVH;W zhIN_KS*)`$t9J|!mitD=0;emXaZV>`T(Qov85=r{8`(@ddq+lw_3+Sv5ivB&j!D>= zqyb*(r0pB7i65yRHO_iEj`9Q1TB_KU+!oVwhlYL#;m@_C<&8;;YE0HXUGi@5Ii!uqwdYf;Iyc2U%mZvsrq$ph0 zLs2L4Y9s8PNva4OI66FIt!BDsq#ASX1Ef1Qino^&oQt`ph@; zKbY@qCaHDjqu$eVntT4IjnFajZ6x+)b`q&D@~Rfs>u6%TrC6%AE~eGAHR(reWK9-? zq148J&B}edur$^>m+G4I6+fDz)}*7TlUFAq)pm9{lwt;sMnnk?Y{w!;5ROOPcu zjt*i>Ib>>k2%4XhrB^Nfbq!HCf|BbE(k!zjH zvfS&UYHCuxd|L8^xU6;2lPGE?5wrBnIGv0WH{GV~bR$~SX!^3A5||w!N~4w^$l{3B z9IBInana1AxpBUUqB#92?TL)2-tNGZuXmwOM;=k8tPcg$vIOrHJt@cg&0Jm*N7&-N z_W2&k?p)2fd@%Ed%VT!Zk>QctrFJ70T12kfi?m`sck@>4G(@`_)uHpf{a?;|+>P2W zP7=gRsBD89(lOk0(9wnplJZN@fM_E#aOT3ovzt2YSRQ_1=-J&nM-D%~WB=}x`h<2S L^yEKSHwo%rSYrDj delta 1056 zcmXxjU2IEn7{~Evtn1LyZqpV+)vy^8E=X+N!jfTTI1>r6G+R`YI>jn1wlqYD2#XX~ z!V+9axR52y7I(N1AxK1A5qA=9B(4bY{hhT>&N-j+{(qk5{Li)3{}TDnHI+AwXlAWv z%~hDS;_E4Fi1DdrA)LTYuD!xWj-x)aTHK6&bZ{0P!fMRmay*4Ia1=Mo0@#Be`eujud5|FpOVN1N_8Q_!on?lFcS;MI~|;sl^^3i#=wu z6QANt^s~`>BA8c866{291Fk^_V|WQq<0z`NG1{TlwxBB6gBoZM^`3J$2XCVWE@CIX zKy@}u8&y~YRnXcH{Z|V+IH8OVB3-c*M)3r$z{{oUMbwL*;V`~K=8<*rHdXE*jr8V+ z5>qs?D(NLUAT+PlWyMl`f3;ZEDszP@)%RCu0x4rmEs`#{L8@Rury>>&8BYCwzss(Hl*Z7h1aa?%vV9)#>fpva5YK XJ`~@V%=BmDX?NiH{ansXyD9q*{-|eO diff --git a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po index 07cd7138..10baa705 100644 --- a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -140,6 +140,10 @@ msgstr "Integrationsvägen för gateway är inte inställd" msgid "invalid integration path: %(path)s" msgstr "ogiltig integrationsväg: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Transaktionsbeloppet passade inte in i de tillåtna gränserna:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -190,10 +194,36 @@ msgstr "En leverantör att få priser från krävs" msgid "couldn't find provider {provider}" msgstr "Kunde inte hitta leverantören {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Saldo insättning" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | saldo insättning" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Denna klass tillhandahåller en API-slutpunkt för att hantera insättningstransaktioner.\n" +"Den stöder skapandet av en insättningstransaktion efter validering av de tillhandahållna uppgifterna. Om användaren inte är autentiserad returneras ett lämpligt svar. Vid lyckad validering och utförande ges ett svar med transaktionsdetaljerna." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Hanterar inkommande callback-förfrågningar till API:et.\n" +"Den här klassen bearbetar och dirigerar inkommande HTTP POST-begäranden till lämplig pgateway-hanterare baserat på den angivna gateway-parametern. Den är utformad för att hantera återuppringningshändelser som kommer från externa system och tillhandahålla ett lämpligt HTTP-svar som indikerar framgång eller misslyckande." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Transaktion {transaction.uuid} har ingen gateway" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} har ingen integration" #: engine/payments/viewsets.py:14 msgid "" @@ -209,4 +239,3 @@ msgstr "" "deserialisering av data. Klassen säkerställer att endast auktoriserade " "användare, som uppfyller specifika behörigheter, kan komma åt " "transaktionerna." - diff --git a/engine/payments/locale/th_TH/LC_MESSAGES/django.mo b/engine/payments/locale/th_TH/LC_MESSAGES/django.mo index 4af3636c614a8313d5d16c15faf08ae329f2619e..cfcfaf033c4491219cf7126758b9d5b03f99462d 100644 GIT binary patch delta 3560 zcma)-ON(ZSU)#jsoTI9WJ?W!w}795eAGq0x|E94S4`U2_zQdp{12Q9J~Tn8R&XmQ z?{|VLz&)S@9tOqn7vOC0Td*Cx0?q^f1!sU7C;i}q;1uvAcn5e9oJ)N53lox3V~HXL z6LOpnPGbEqxDtFElyigNOz;pW8Jz}&(B~lB)pt4m2nwOg;9~F(@IG+n#4MrB;6&o9 zXPLYJmOycE1r&on!6K5*g2hv;58SNO-!~}r6S#=-e1B_JntwVV$NMhQ+r<7}aFF#k z)0A2WZke7D-4D)Z{RW6@H4H{iGP#()m`eKRS+4}86n}#FP|HZS3tSJL11q5POBW3z zl0E}I0Pf21G+1E$E4T{mp*}<404M~O&VdxzI|uz8Ca2gCDLZagY8^Nq+ywT668Iwc z0r(pz%m+1UfJedQ;B*>Ba3jb^4e%v)C&7ooOJE7?pzv>k2S6b{d0v!F7SJ*CTF4xv zZ`4+3-VZ(pvTf=}`AmP{OD*AP<&hy0%NWZewp7CmX)+m9OTpXp64fz*rMxoc6Tdzd z(H%(#f^4 zlnIqk-T6i*h#+cezLxu})>@&x$J(c#4}HrGtU~B`Zujv!Dkx?q(`+pNM)?c2MeiXDW34m}<2u=OJwd%9bDcQ}DAl&m1oW#22< zL4YwnwC`2IWj14Q?&-zDlVclUhmr?Y(xPA}xit zhG=`7aEA%rlqh+Gs7BA39x??+zlIWe%a)!sve8v*;nDqEsW`=YGv}Rg;_ETvmXmsO z9IM}}pnB0Mx(h?yhujpw(=@oZhmI*Z{Z1IH(D9e!kB<-RP)Zw&xDy6i;-A|)qR}z) zF#B~{eK}2zr`1>FJ2{^w2hwCXO-`84klAE@CQXjB;O=8FiNpb0=OtA2MKP$pYC;iq*sypfO+GT-2TYr#37)Zq&8akb+n8d(sf-YI z@Z-R{@?FgWLG+YKW*|+DmvPO`t6QpQo(rP`a ztb;NIj%5{U%AE|ZQ8RfhO+KsD`B-C;g%DLfOA}fE&lF8`e!_Ioh)EZfc?VzoLiU1T z);Ma~iB98IWU-+;q^@np`1sAYuNF55ci5aA6lb~6h>|y8-pw>I_aqBR@u*NGH>)xclLL2)$ewkws(%)+155G{-I+=hiHzf^<2n)B)+9>%K9d&EI$g# tsjQ=rZ@{!Mo6>(xtpF{S^!Xd66^^V>xa%BQGwsoq`d>|aX!_C?^*^=+^1c87 delta 1057 zcmXxjUr19?9KiA4%zx=trf!;<**425)F4Sx`}44eBp(tsm54+Z+2A%KjSQk?1V%jw zU8=VhNJLZ*vHn~ig@}lH5QJVrZf`|BMu8FZ{hi(Y*xBcv`|q6dJHNX)xVkU5R$qQs zh;CXdZN?|kj~~nUBb*H)b-08>T>F5X^qVR~8t@2KVG=jvNvuW-yYM2`;zK-y&u}OH zz#5U91S*R+G-DqZqNoFoqrUh&ZpT@y$9ovTC)k3Y@Em@_Adc`*7%kL+7O)&&px*!5 za|Hv8FF!dL;KDlUjlE2N8xEkZXbg2iXOW*=_PmZdq1zb42dFE3kA7UmEBF=p$*GMZ zyKxdvlgR~)Grs&H55uIjgQsuNzqF}%V;Q6C1iJW(Vjt>@$8i)b@BCYQMgKc$iu262 z8P`y^;19mU@D>Kd�NIX7;%Q9JFzuj$s<_;6eP2kFkf1)(L#U6#5!PGB}EiDa&{i zS8y0xc)Jd4VIJ?JPP{iHGKUG=kMBa{Ul0CqLiehtsrcXs9;QEs7A_<2kUcC*O<;r+ zoCv- mb}Sew^he@8?+$x9x;NxHH(Y1lUApEvPhIDc>%4KD=kgy%YjYw1 diff --git a/engine/payments/locale/th_TH/LC_MESSAGES/django.po b/engine/payments/locale/th_TH/LC_MESSAGES/django.po index 6398fba9..4e3a2fd1 100644 --- a/engine/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/payments/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "ไม่ได้ตั้งค่าเส้นทางการร msgid "invalid integration path: %(path)s" msgstr "เส้นทางบูรณาการไม่ถูกต้อง: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "จำนวนเงินในการทำธุรกรรมไม่ตรงกับวงเงินที่อนุญาต:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -186,10 +190,41 @@ msgstr "จำเป็นต้องมีผู้ให้บริการ msgid "couldn't find provider {provider}" msgstr "ไม่พบผู้ให้บริการ {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | ยอดเงินฝากคงเหลือ" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | ยอดเงินฝาก" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"คลาสนี้ให้บริการจุดเชื่อมต่อ API สำหรับจัดการธุรกรรมฝากเงิน " +"โดยรองรับการสร้างธุรกรรมฝากเงินหลังจากตรวจสอบข้อมูลที่ส่งมาอย่างถูกต้อง " +"หากผู้ใช้ไม่ได้รับการยืนยันตัวตน ระบบจะตอบกลับด้วยข้อความที่เหมาะสม " +"หากการตรวจสอบข้อมูลและดำเนินการสำเร็จ ระบบจะตอบกลับพร้อมรายละเอียดของธุรกรรม" + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"จัดการคำขอการโทรกลับที่เข้ามาไปยัง API คลาสนี้ประมวลผลและส่งต่อคำขอ HTTP " +"POST ที่เข้ามาไปยังตัวจัดการ pgateway ที่เหมาะสมตามพารามิเตอร์ gateway " +"ที่ให้มา " +"มันถูกออกแบบมาเพื่อจัดการเหตุการณ์การโทรกลับที่มาจากระบบภายนอกและให้คำตอบ " +"HTTP ที่เหมาะสมซึ่งบ่งบอกถึงความสำเร็จหรือความล้มเหลว" + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "ธุรกรรม {transaction.uuid} ไม่มีเกตเวย์" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "เกตเวย์ {transaction.gateway} ไม่มีการรวมระบบ" #: engine/payments/viewsets.py:14 msgid "" @@ -200,7 +235,7 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet สำหรับการจัดการการดำเนินการแบบอ่านอย่างเดียวบนโมเดล Transaction " -"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้ " -"TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " -"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ สามารถเข้าถึงธุรกรรมได้" - +"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้" +" TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " +"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ " +"สามารถเข้าถึงธุรกรรมได้" diff --git a/engine/payments/locale/tr_TR/LC_MESSAGES/django.mo b/engine/payments/locale/tr_TR/LC_MESSAGES/django.mo index b6563cbe1d14c6924358947842c7c2b120cd54ad..11fce32c4128c2eadbdc1daebf5da0901275e156 100644 GIT binary patch delta 2850 zcmaKtO>9(E6vr<@6$&UKhzjThtA&Cigop+eqtMWbKqDnYH+VbmO?#d9F}{zML2#lA zW89EPOk9`@#zi$Qq!QWKgpe5`MqIdX%Yv1xh_Y~FqQCRre6(P^>3hHT?tS-s{Li`5 zn;Wlht6f{U=u^em#`cn7@HR5Yn$O9Yj46A;n^OgR*Y6vGX;9{vnh!W-~$_&0n6YK-{sdAJ&W4L8Dza0C9;bsk7cEy9azSkhu2T+aJT z@CA4P%6A{bweU2QjJ|;q&<~K<)zub%gA&j+xEcNdpM`6eCF zvf)qYAn7`ykj&q|SE-}C&q5!r!m9-E!Tm}V;3v>Be+f!SwxIt*@C`_{R0QSw*p52srTv+yYISD{GQw@N8|si78+!eQP^a1A^MCEzP?1N;@@Tit?NU=MmrPi=?q z!Gll~{ss2I-&dpm6Fe+`Fqd`*6vNL!{?rIJL{Q^!A55T>U=}_DFF}#`FNjUm%Vx^1 zG?c&wpxE2NO=`X$ZifMs-Z{Gl{VBitiirfChf?!R=q4HLgeaOhp?q2NlBuXB`(*Uz z$O04RB%cj&C_@x{j7#jwp^`wQyfXTv{_XK(>p>!K4+%nQDJn<}MJ?%eX}C>X4|7Q- z16+4;Nqx6*$&lK&hm=Kz&hB~rr8G6^X%1`3%#QgHr7SY#IdeKVbP6aHe*9aVVcafGc-CnqDKxL9u-6L?3fBWE0HBC zU1`NeXc9-H$4u-xIt((8H9nlQ4ioLqDkd_%o48Ry4=0*X95=S(0bdYgZljxlJLv|5 z-%6|$g}!!=vo|oFj;nFv`g!OrFQlR8#x^usBZbI~D`613DCF28qM=co7A12XM!ICI zmquWnXcTG+Fb)aUv!ewd=VW1XNs(Iw=j2%)CI!znt(v%XE@UHZ(Ai@#VL zyNQ%GJ|8Uka6xU~{~jZRlk*c-!@%g+OxOx3HS5-MY@{f7f7R9FuIC2aBdeul4ap{M znGUys)%J3or$X;5sg9d7L35_G6+6wkX9DTLX06W7#;ZZ$j=u>n>a7oxW9?g6{g zw4QWzS{+Y=?g7huR&CK{hN_JV0Ra-Q2TaH?fHj z#Ba`AuJc7yP;=!HU3AsRf`}`EO5`1NB{VEyNPNjDOdHd*ei^$Rca-38NA^i}iv{h3 zwPrm^J>xWI_?)H>1DuJS|MH5u}@O+%am8Vp!cU9nKWmL*-D_x*7qz8 zgR9(A;F~PZ*lZPrY7|b~!3Jq;Wz z=IUrumD-_Lw}_4DtSEDQWpx;oU=h4|F4HwTkNvUjywCgZlAXqWEYrB%zO9Dk^9z@L z-!q_-G|8I7okr`0fW(p_iHt@vz9`y3WVUO)8e;GWTA2VXugcuJq7 Rt;&{jCBK0uY!b$)`WHDb8HoS@ delta 1066 zcmXxjPi%{E9LMqRXg93YZbpZpW^6OW1u={Gw`>!mk z{DF(ia^|lrO{m9qzGy<-upf2d3%Cj|VJ+UlbvT79@B^mtJ1)gz{HPIAs2fe72MehA z&s;yEpZnWSK6LQKU)01Mw7(KNP%AotYUmvDvQgJ-sD{R|74M@~`UZXY8OQJ|^0Lzl z&6+WRXGn4a1Ki*KkVBFa9)7)ZT z@wn?<>|s2GA^eSMsG3PRMO4R!8r+V04!Y5K7Vs+LTd3%QbkT%uxE>>@#70mTzKqK- zkMv}Zu?wH0=FQJ)kt*)xIzy=;?Y~Ottl?1itsF|HTr9>ZHKcvl zzoA^K-49ApD-FA2rK2R(w6-=F;Z3C{yj)tj(ohm4Z*?5n9<7jnpA)UN!Kvs_EHfO7 zXOn}Oa9>}~frkxM-h9+ISs5S9oJ}UC|M{+01d2~zPo@Ua&V=US_N^Bwk diff --git a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po index 90e0a3e2..ba77d87c 100644 --- a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -140,6 +140,10 @@ msgstr "ağ geçidi entegrasyon yolu ayarlanmamış" msgid "invalid integration path: %(path)s" msgstr "geçersiz entegrasyon yolu: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "İşlem tutarı izin verilen limitlere uymuyordu:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -169,8 +173,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten " -"çekinmeyin\n" +"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten çekinmeyin\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -191,10 +194,36 @@ msgstr "Fiyat almak için bir sağlayıcı gereklidir" msgid "couldn't find provider {provider}" msgstr "Sağlayıcı bulunamadı {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Bakiye Yatırma" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | bakiye depozitosu" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Bu sınıf, para yatırma işlemlerini işlemek için bir API uç noktası sağlar.\n" +"Sağlanan verileri doğruladıktan sonra bir para yatırma işleminin oluşturulmasını destekler. Kullanıcının kimliği doğrulanmamışsa, uygun bir yanıt döndürülür. Doğrulama ve yürütme başarılı olduğunda, işlem ayrıntılarını içeren bir yanıt sağlanır." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"API'ye gelen geri arama isteklerini işler.\n" +"Bu sınıf, sağlanan ağ geçidi parametresine göre gelen HTTP POST isteklerini işler ve uygun pgateway işleyicisine yönlendirir. Harici sistemlerden gelen geri arama olaylarını işlemek ve başarı veya başarısızlığı gösteren uygun bir HTTP yanıtı sağlamak için tasarlanmıştır." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "İşlem {transaction.uuid}'ın ağ geçidi yok" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Gateway {transaction.gateway} entegrasyona sahip değildir" #: engine/payments/viewsets.py:14 msgid "" @@ -209,4 +238,3 @@ msgstr "" "sağlar. Verileri serileştirmek ve seriden çıkarmak için " "TransactionSerializer kullanır. Sınıf, yalnızca belirli izinleri karşılayan " "yetkili kullanıcıların işlemlere erişebilmesini sağlar." - diff --git a/engine/payments/locale/vi_VN/LC_MESSAGES/django.mo b/engine/payments/locale/vi_VN/LC_MESSAGES/django.mo index e8758b00fd2f0b68bb365c567a9deaeb35fea4e6..d4c479d1e13773c2916872cbe39bef4f0b929d6d 100644 GIT binary patch delta 2945 zcmZ{kTWl0%6vqbvDc}W*f)~^SBG8H}M!^IHgO>ma3Q221co3(v)9%>anQ<;H^^y%i zMI~OEh8S;2n~DUHK&{cRE9t{Ds8Qea#RuZ}q)$eD)#&fc?sm7RUpo7n`7Y=3Kj-Ub zYm$xS3+?lc8jKA*D|p_WV;B$W`&@n)>*m$gI^e^s?Sot3=zPOi!uo|v4dZtBE8NBW zjSD!#_mgdgu@sI#ri|n8N_ZObXH4rPry}h3a-Sz@e?m3Wz55i9#~lCYIr%{ z_rv?(BT)Cf0&jq?L(S+U)PSmx*o|-M{2ppR7hnhc4c-H9xU7~?7rYGr#(rL&g+-_a zet~-6cbG@g6-042-v_TSj4{4Hh3~_?c)gnWzpkPrupMtx%lTT5AZIykKKCkHFzz28}`6ScpY4}j11rg*a^45n_vNMgNN(i zU%{97{u!zwPc5%0@%(b!ZDiteCRFO*;Yz69ZUw8LI@$p(*aJ24^H8Py8mhs$Y*H?R z8gK`s{KiJ8O?W@N6L!G|;0sXqeR&<}>dSXbd;ou}FC3;3?%;a_qG)DZ_i2AWIyqQG=R(~2C=&GpqLpObYA~`bn`_!WX|$Rj@u`eSuFOLR=))H zQ{~tWqfjDGqJk~k_Uz0p>Ml5;SVc1o#Sc8o4nq!OLjo_3TJ7xU?%pGNc6W8Fp;>lJ zpOb#z5S94#*a%JI2&Bgh?Ywwy=CRDi0VmHyW1DXVX3381ASXK`A(XrwI(;rX2(o6Q znSniEyM$j)tT*sVVjtkFYZfIO3M0Ez3%%}zG^91Q9o=P82<*`J+|Wj$ykj968ilc? znTr=lujv%yz|I-7h0&?E7AzqN8}(3hb;* z;`NG2uKzkDW-kfJfLV0%wb=CBjBL!ADAk);i$iuInd?Pj#_V$=O~}r#zc}+o&Sl*m z*ijsya87o+jm&%F;*3vfrS-QD*jB79g|((=gHBY)oVO%O9ucb1b6F2%1xCN767tw% zJ0H@C&PEH*?&mmm@-xj`?~L)U=FZaBjvk{6?T-pRXbBk4tMir@(i?hVp0MW^IM z;bs~6qHU}#v?DETIO#5YaZdTcw0e{}|MxBGFC?GnMM)+lN={h?DWuhLKWFSstEZ%x zoMUColA+|oSgf>iJeIz+`l=(vv@+(%y2kzLkm=#HGL>~mPIjf$cYJY^(IGjIR?9Uz z1IegvsvdFCFdoWwUu?U1&Fbc&Ao+;>Sg9GAxnX`GIa>==@@aL#M5^RNy=P`g!n8U( zbH}EK%jeIKk|kEGd8Uw0hW`m41{~ zPuBE7w8J>ZF+O@U61UGwMjavReJ!5FFQk=mS0f*BBulp?6P4$XSS-FQ0Vx%dQIfZ^ z0u{Wp@|mSRD#s$}QTcPm$o|DE%G1L{cBq6G+&kGFtr?n8ElZ-$F+J7l2sL&&?n}hE zgKkX>e7=c>2qh7Vp8Vf-3C&pg3yvJnz95`(b;44+r)fb{h?~035*%$~L{Z7#b0nXf z)nXLRpD~;J8x}FRUP@{8t!TDfElP!HnbHz?Wn2bGCnsGO#i!wE?`d^-rPw@8 zVgJ*Umf(a*eC)0DMynhx&hh%Mfq8muy*xZZlG1WsdTYk5-%BZ zbCYe0H!YacHFEHZ<(>7NRBxh0&K?r>q4_%w{ZtuqiPuB1s6&y8r+H delta 1042 zcmXxjOK1~O6vpur`-ss*+cesznrdzOP*F-PXe|{4srUlZ;zE>|(ln4JMO#o%0!2jV zqKlv_@j*cl-AF+#3NE^-QYnHvL8vQ5aU~)Z!T)zNIppRycV_O~bI;sa=zh_f{~RvA zZA2%ni8kRgJBUkb_##1A3nuq z{Eq9)@)oKr-cW}JxX^-{@B-?=NV<4t$Ia_#VgbD{jIe25rX-YN8n|$7iVf zpL>455cAs)4tlw;in_6f^c%4kwW71Aghr8{UG__#d@D@Hqt+azO^xz@v#z|yOdx9$UJnqC# zsEK^lW=U*BC7wr(zkzz*>uU1W!7?Yb(l1C=>?dk-{lR@0K1AGfkUNRpSG&s?+=_w8KkL%Ymw(O~ae92#rFx&BNE{-dzj2h+j%% zFDH@{>0CBCI5==*w#i>nhzIXiCUe=5bZYKz@TM Pe_^qH$-A>~w;}c)g~Vko diff --git a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po index ec4b09ef..5aa06514 100644 --- a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -142,6 +142,10 @@ msgstr "Đường dẫn tích hợp cổng không được thiết lập." msgid "invalid integration path: %(path)s" msgstr "Đường dẫn tích hợp không hợp lệ: %(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "Số tiền giao dịch không nằm trong giới hạn cho phép:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -171,8 +175,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng " -"tôi tại %(contact_email)s." +"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng" +" tôi tại %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 #, python-format @@ -192,10 +196,42 @@ msgstr "Cần có nhà cung cấp để lấy báo giá." msgid "couldn't find provider {provider}" msgstr "Không thể tìm thấy nhà cung cấp {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME} | Số dư tiền gửi" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME} | Số dư tiền gửi" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"Lớp này cung cấp một điểm cuối API để xử lý các giao dịch nạp tiền. Nó hỗ " +"trợ tạo giao dịch nạp tiền sau khi xác thực dữ liệu được cung cấp. Nếu người" +" dùng chưa được xác thực, một phản hồi phù hợp sẽ được trả về. Sau khi xác " +"thực và thực thi thành công, một phản hồi chứa chi tiết giao dịch sẽ được " +"cung cấp." + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"Xử lý các yêu cầu gọi lại (callback) đến API. Lớp này xử lý và định tuyến " +"các yêu cầu HTTP POST đến trình xử lý pgateway phù hợp dựa trên tham số " +"gateway được cung cấp. Nó được thiết kế để xử lý các sự kiện gọi lại từ các " +"hệ thống bên ngoài và cung cấp phản hồi HTTP phù hợp để chỉ ra thành công " +"hoặc thất bại." + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "Giao dịch {transaction.uuid} không có cổng thanh toán." + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "Cổng {transaction.gateway} không có tích hợp." #: engine/payments/viewsets.py:14 msgid "" @@ -210,4 +246,3 @@ msgstr "" "dụng TransactionSerializer để serialize và deserialize dữ liệu. Lớp này đảm " "bảo rằng chỉ những người dùng được ủy quyền, đáp ứng các quyền hạn cụ thể, " "mới có thể truy cập vào các giao dịch." - diff --git a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.mo index 9181c8d7a3224c03ac1453185fcf5c4cac42cbd0..4ec9a71454b3541c66bd660018e79ae88215f7e1 100644 GIT binary patch delta 2590 zcmZXTTWl0%6vsboQ78zAfETEIAaW_Nq9%}lV2lz=B0@rW@kNK7*>+@iW}OR#C~mu@ zWr0E$TM%fuR9h$%*p`w)cMDDQ0gULAJelx-J2SgaM0qnB{GXZGZL42)_BY?{T>j@w ze*Ry}V-IGQ9%C4*@XW*0F@dr7=)DAg7)wjNy=CA=?0pQb2hUApYzFopJk8ij@DcbS z*2|y49n3$Q#Mtv-D~Kg_0h|t|K>XMU{wf%YvAcMgf`!N62Ji{E0NgN{u`=*ekoI?i zYr$HO9A5*;@DE@)_!Br2%!99je}gZB97ZDGI&e045nKq4fD7QCJ;V!=Vx{mx7bg2$ z1U`%TJK)>kW{}Pu1m}V+AZ64GQa~9Hv9o(V?}HT318^Dm2e<~DJJm~Q8#opI*(Z4U z5)6Z6AP>@oKfw?rorfrB-Y^aOm|p>(U_J=%u*nADeKGhw_z#!|DM05rFMtw6f$Fe1 zAWX7ye_jE`R%77}f1?I`3v&}BNiTwQ@s7X$3-~7HzxnfNC@}5M1z!Xgg5+QwNC8xW zWJd(+z_`C(GRs?^F$?;?f{g$c$k1kxB(3r(f+!<1z!l(EAf4+4sg~D3a(LJ0eSiNU zNcZyo`eTs%(4{57e30yXFdO>Q%STwK1-JVfKZCDf{woN@-8z!g)F0HG6b#zN9b}LO z^#(bGFLzLr(LlA>d_2@k^ijd2TTXy2qWTxcV*iDDpfHx>WhEZU5?`Df6iG@Aw-nDy zc<3vr!1ELyQg0O=8dQ?PKr6U|`=q4lbB|G-3gdOWxaIH{=797mz2MJLK4>NwQmwFu ze_?2Xq63qT$4VJ znUZek+)%kuBk^~)ZVHrD)yO&zh6P>cQB4g>x{k}R!8O%1#@eZ@s@lr8ZrN5vhQ`?u zqPQ8=WJJZIeryPh;?VdGL6=0XDz3*E4(^ggEEJAK1x<)ZhNK1fCW9jsQPSmV1t$=s zXJa%2X_urRd_S>}rbf858+R2U%=JCGAw|5KqE=LYX}1(Ksik0TRJ2;zsBxW-Nfdb)Pz^oj_K;g( z=r^ha-@bj*`?OF|XyNhwY?`uIY-YbRzWcFc;%cNm){hWTO{gx)qO!!`A;^s)s2mNh z)}mv=azr-twY>Gtq|QmYWKe1K0cCPxLd>~!)M^|U@6~s-m)qAm?T!Qa_9i=#WLDQc zC)t!8K4&#{JE!)!^|sp2^k?jIL-ygTc1tpQyB#Mz7gkH$ zKGyeWxY_C(V$ehpPWw$O-9{dZpOAOR={aPjTj19B`c043 z(c^8|r@M3eFIip3^9?=DK*q_O#eFZ>Z2C|(Ge~g^4caX+iZNdow{EqP2R9n4^)MXb zL@ssRK5+!OTL;hDiQ`sRf9`rW{4w95n_xEG$ zU2U-2Qg(AaV$5HH>3aJ>o$nu>Aq^z6l1HpWyOl{>V{GBJbv|yN>2TV5?8FVb<5Irv zRBmK{F5R2W-12NuI*F6nVXU_y&7x#pDn$$4Ve9K=`@n@(olH}9q|>fXk%F!=qySX34t9F&>m426LSEx~{o~btV8WF3r3>==kLJHUoxOS3 kxqRMACalK#+|`?~oIjbw`lI1ft!t*Y6kD|Q-t_W+0brOncK`qY delta 1033 zcmXxjPe_zO7{~F)ZPjddZL>DD*0i#8GY~Q~(*8hE6a^jD=n%ystO>e`e=tGW>LiMJ zSgJ$NA36zMLWt_nArwUG5O^&V3YDT$bWno6zjtRJcJ}kmJM+%W`^>x>b?cSsZzcXm zM$}QFl>R)kX8h#ik9fPqER65)3T+EmOT9GTY$u+@LX6{fyop<}6OZ5k2Ji)*#%bJ- zKXIE`+Cl}{4rO?fhHBJ=w^0N4U{ zg6cPm+M-3&d@IG|Ul+e!hfUOjK1S31AZns=)Bq=(XK;}E1y}!oIumn9X1!~6(~DaE zbsi37tEO|UgQ+;I{nxh`TA{ZMr~_0<(Yc6G^p)g-xx8TaynWZ#kP9tZp)X2X zSw&IorsxooP~!uz@HPGvN_Q?wxlk5#Xh?|dqU@mP@bL9{nW;uE;=PGfU!twQqdQgA z+Is2yt7u_7|qpm~dYoy{o_o7~8 diff --git a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po index 251081dd..2299c49a 100644 --- a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -138,6 +138,10 @@ msgstr "网关集成路径未设置" msgid "invalid integration path: %(path)s" msgstr "集成路径无效:%(path)s" +#: engine/payments/signals.py:41 +msgid "the transaction amount didn't fit into allowed limits: " +msgstr "交易金额不符合允许的限额:" + #: engine/payments/templates/balance_deposit_email.html:6 #: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -188,10 +192,36 @@ msgstr "需要提供商提供费率" msgid "couldn't find provider {provider}" msgstr "找不到提供商 {provider}" -#: engine/payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:28 #, python-brace-format -msgid "{config.PROJECT_NAME} | balance deposit" -msgstr "{config.PROJECT_NAME}| 余额存款" +msgid "{settings.PROJECT_NAME} | balance deposit" +msgstr "{settings.PROJECT_NAME}| 余额存款" + +#: engine/payments/views.py:23 +msgid "" +"This class provides an API endpoint to handle deposit transactions.\n" +"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +msgstr "" +"该类提供了处理存款交易的 API 端点。\n" +"它支持在验证所提供的数据后创建存款交易。如果用户未通过身份验证,则会返回相应的响应。如果验证和执行成功,则会提供包含交易详细信息的响应。" + +#: engine/payments/views.py:49 +msgid "" +"Handles incoming callback requests to the API.\n" +"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +msgstr "" +"处理传入的 API 回调请求。\n" +"该类根据提供的网关参数,将传入的 HTTP POST 请求处理并路由到相应的 pgateway 处理程序。该类旨在处理来自外部系统的回调事件,并提供适当的 HTTP 响应,说明成功或失败。" + +#: engine/payments/views.py:60 +#, python-brace-format +msgid "Transaction {transaction.uuid} has no gateway" +msgstr "交易 {transaction.uuid} 没有网关" + +#: engine/payments/views.py:63 +#, python-brace-format +msgid "Gateway {transaction.gateway} has no integration" +msgstr "网关 {transaction.gateway} 没有集成" #: engine/payments/viewsets.py:14 msgid "" @@ -201,7 +231,5 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"ViewSet 用于处理对事务模型的只读操作。该类提供了与事务数据交互的只读接口。它" -"使用 TransactionSerializer 对数据进行序列化和反序列化。该类确保只有符合特定权" -"限的授权用户才能访问事务。" - +"ViewSet 用于处理对事务模型的只读操作。该类提供了与事务数据交互的只读接口。它使用 TransactionSerializer " +"对数据进行序列化和反序列化。该类确保只有符合特定权限的授权用户才能访问事务。" diff --git a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo index f355f01e79c5c5fd5372dbcf77f4b5c7ed221d90..77b55b1c900aa47158bc5ac404ac0f030e84e503 100644 GIT binary patch delta 1159 zcmYk*SxA&o6u|NGS=fwNIORB)GtOs@Ws^&q)8bMtEz}sLMQMmBlSojuD1@4Q&_fxC z1Rn$<20c^+ErJh5Ptzjw(gI>2MGpl*7#QS3tMot2P{9npbH2IvyZ4-X=Rv;_?Kei} z7Fa$Jd66j+#Lt+E9>2&DL!=V#lHV{zcH+J)k#rov3>=R;i5~J<)b}h}A>zPdT#IGs zO%OST8_6#PM7H4LfLM}5kdPy?5*OndEWs1lf}fc9N^^Y3?uK|CWKaq|#T__>QS{}B zB;z~O-)FE8e_@3AdHEvsz^Y*QD$j2mzqnIp4UhTb9(6C2Qr-MAmG zqIPTs-I!V&>r4<+$hRX!%R$ufJ(!Fyu@2u_1bn1mU2H-tYHLrU4jjZ%9FF@MwPIIE ztb#^7Kz<8ra2`#p4v8$o2y!ZN26cl&s2jVFOVNrFgb5~52m05G+`}pyz%S^=KH72} zZA`-u2kF9EOvGl?qin-^Jc&B*32GtJsGazT+G*z|k=3j(A%Yej97b(@6!px$p|&WO z^0ToAoA4UyLO*c{CUQO=bfaFre54j>K=v+!xEUvq1!ZA5W3T{ISYMh5(s^(kwPhD^ z4-R7i&Y<4b}pBlUI=sp^1;M7vE!sMbKO+vI~1q zk75G#Qn{*PXH|;Yx-hb)bfAfMP&e{C?swGrIn`W5JcU~E1$={}s2d#MqGaJs^l@?J z8NoLEfd=YdaWCI#CdS=DpHxnyH{AVVX&qQDS69=|d<)mjxpd5rh^I zgB~o1pbNo5^kAirQ78&Q6cqF#VNj4_1V!J&uCV|8oHIM~pP4hW(?iaSA?Mk0q(4v6 ztXs;(Rm?zlrgX-U_Tm%rNsn{@o3f--oWL{;hMmI{@+I_PWVRHIMOcCrm>waW!=2<&|Ht1pjET1;lKYwqgnPVF!L=;5*ClIjfzZJ(o@{oW^>b$7xJ0kmB$o+V6{4 zjK8sq@p*+(3;76*hww|WUph`u$TDr>TUdcXWQ>+@4{j=zJlKlq*pIDv8?Azin1rsf zP-Sw_MP7q!T1U|O4`3X=#b*5AC*ULBw$Ol+Xr=8%>o|~)njeCu@k@sko_=;BPb-Sc|=2t1fX&O$Tm3|8C%$CtgWZ!aKkKzmO=4&rFo4Gi8wK87BAiC6G5ruhlltEGcDfOZr!XqPH} zf9R~r(Mng3%&GI}!G~xIc@uU8ZG2XZl!zD6c07om@G;r~hqx$K;d_|DqXoXQFu6{0 z(Ef^tc@&6={^eW?{EhB%t_M0}emDv=$2K}wgLh-g5~I5Mde8QB2UgrUYoRC86PR_o XgVmYc-nF**THjh2Syvf&P@DZ92x6Q; diff --git a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index 353d5c2d..2cc29678 100644 --- a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "الرصيد" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "الطلب" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "الطلبات" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "معلومات شخصية" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "الأذونات" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "تواريخ مهمة" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "معلومات إضافية" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "لا يمكنك القفز فوق رأسك!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "إغلاق المواضيع المحددة" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "فتح المواضيع المحددة" @@ -134,7 +134,7 @@ msgstr "التحقق من الرمز المميز" msgid "Verify a token (refresh or access)." msgstr "التحقق من الرمز المميز (التحديث أو الوصول)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "الرمز المميز صالح" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -191,49 +191,49 @@ msgstr "رابط التفعيل غير صالح أو أن الحساب مفعل msgid "merge client-stored recently viewed products" msgstr "دمج المنتجات التي تم عرضها مؤخراً المخزنة لدى العميل" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "معرّف المستخدم الذي تم ترميزه بـ b64 الذي أحال المستخدم الجديد إلينا." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "كلمة المرور ضعيفة جداً" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "بريد إلكتروني مشوه" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "رقم هاتف مشوه: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "تم تفعيل الحساب بالفعل..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "الرمز غير صالح!" @@ -274,19 +274,19 @@ msgstr "اللغة هي واحدة من {settings.LANGUAGES} مع {settings.LANG msgid "address set" msgstr "العناوين" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "مطلوب بريد إلكتروني صالح للمحادثات المجهولة." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "يجب أن تتكون الرسالة من 1...1028 حرفاً." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "نحن نبحث عن عامل التشغيل للرد عليك بالفعل، انتظر!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "يجب أن يكون المعين مستخدمًا من الموظفين." @@ -548,13 +548,13 @@ msgstr "مع أطيب تحياتي،
فريق %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | تفعيل الحساب" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | تفعيل الحساب" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | إعادة تعيين كلمة المرور" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | إعادة تعيين كلمة المرور" #: engine/vibes_auth/validators.py:13 msgid "" @@ -578,7 +578,7 @@ msgstr "" "الاعتماد المقدمة. وهو مبني على طريقة عرض الرمز المميز الأساسي ويضمن تحديد " "المعدل المناسب للحماية من هجمات القوة الغاشمة." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -591,7 +591,7 @@ msgstr "" " طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل " "المرتبطة بها للتحقق من صحة مدخلات تحديث الرمز المميز وإنتاج مخرجات مناسبة." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -599,7 +599,7 @@ msgstr "" "يمثل طريقة عرض للتحقق من رموز JSON Web Tokens (JWT) باستخدام تسلسل محدد " "ومنطق التحقق من الصحة." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "الرمز المميز غير صالح" diff --git a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo index 7156700f8cef5e90f6d361ed6f086ef613553448..f20c68db7531650592e3df0927e75da7c4e8760e 100644 GIT binary patch delta 1157 zcmYk*Pe{{Y7{KvoQ*zTqu1z%8_FJtrU1erj3+$h#Y#?SucnFJHe~466sA%?+CIe6QjoXk5Oh!qBR#A`(f4sb!qew{-o5Yhd*0`LH`n*8Z+x-D z42sBfNF_(a(CTeFM;dXq5THsIAlUHmO*@FSp zeO>6qtF{?jL7YYH$P?5KzD5_$<2Edq48jcJl%uUoqHgR$J;_Oo;(6OUs0s6^1x@2# zoV9eY>)=FQrgIR;wUQ`E#?(82;9!x1h_H-5!5E}(Xxk4+vN z#tIxoE$AU8F>lZ7F-wU(xE8(0ElC5?SyPTPIKV^(ci?;En#IXQ>B4%f!A@+!i>MzQ zv(2NA_zn8;6LL#3i&{_>U(q+vhLGrlIz+y=!V}W@%ayW?D$0jwdb8VLtOwbl?=O!n=6gCh`n7 zGe6=HS&!o$i7qa@M_@I9ht?18aToJACM^@GDiFC%f*Puf692qGBn>;L-oOBA{0gRE zMoFT8TqK3KG0gr(tYrSYRAdv*m$GX+1J6bg7q%l!kRjAg+`z5)7`4D3s3%V;6WNKm zsQcP53qzKpn9O_vwIerCJNN|c_#G=S9%W!KD54x~Ja$2J_}!gS*&4C5SX2m08Q zhGATRIZLG#xR@tQ_R74$Suh%YC&0iMc+Uf>H%9(*Y{$YzM5eMSp+WON}R-MjG?yh3zAC~ za5q*^rFLM@@&f7`xQbfnG>+g~^kEChH19NK;!E6zA26Hmi+fw5vTD@3^rAk(%jm%S zn1hc{Tlfa`ael=$n8FLzlX_53T8G-9PSk@1Fo+|lh5tnDtkjT4A6E$jP2ffTC5!EE zMKK-r-?oVP&)#JlHai@1HZc#RHrv7vCQ~bOlDmR|\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Bilance" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Objednávka" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Objednávky" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Osobní informace" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Oprávnění" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Důležitá data" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Další informace" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Nemůžete skákat přes hlavu!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Zavřít vybraná vlákna" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Otevřít vybraná vlákna" @@ -134,7 +134,7 @@ msgstr "Ověření tokenu" msgid "Verify a token (refresh or access)." msgstr "Ověření tokenu (obnovení nebo přístup)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Token je platný" @@ -171,7 +171,7 @@ msgid "confirm a user's password reset" msgstr "Potvrzení obnovení hesla uživatele" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -189,49 +189,49 @@ msgstr "Aktivační odkaz je neplatný nebo je účet již aktivován" msgid "merge client-stored recently viewed products" msgstr "Sloučení naposledy zobrazených produktů uložených u klienta" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Uuid uživatele s kódem b64, který nám nového uživatele doporučil." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Heslo je příliš slabé" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Špatně formulovaný e-mail" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Chybně zadané telefonní číslo: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Účet byl již aktivován..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token je neplatný!" @@ -274,19 +274,19 @@ msgstr "" msgid "address set" msgstr "Adresy" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Pro anonymní chaty je vyžadován platný e-mail." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Zpráva musí mít 1..1028 znaků." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Už hledáme operátora, který vám odpoví, vydržte!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Příjemce musí být zaměstnanecký uživatel." @@ -549,13 +549,13 @@ msgstr "S pozdravem,
tým %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Aktivovat účet" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Aktivovat účet" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Obnovit heslo" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Obnovit heslo" #: engine/vibes_auth/validators.py:13 msgid "" @@ -580,7 +580,7 @@ msgstr "" "zobrazením tokenu a zajišťuje správné omezení rychlosti pro ochranu před " "útoky hrubou silou." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -594,7 +594,7 @@ msgstr "" "limitů rychlosti. Zobrazení se spoléhá na přidružený serializér, který " "ověřuje vstupy pro obnovení tokenu a vytváří příslušné výstupy." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -602,7 +602,7 @@ msgstr "" "Představuje zobrazení pro ověřování webových tokenů JSON (JWT) pomocí " "specifické serializační a validační logiky." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Token je neplatný" diff --git a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo index 5d772cad6e4b74578146a2c375441a9c761b0bb3..16d05c9a9d683a6206f9c42db3a382a2b65d6368 100644 GIT binary patch delta 1184 zcmX}rO-NKx6u|NGGIM79)^VmZXI_|Pmfxn7AzEl*mZojoI96JSHi}LKIrh>`6a>** zRah<(YLkfzp@m5V5kv$Lfl*st9_s+xcT=?;?1S?-e zUI#>qaSe;m9~9{|L>jQ0c*Ydjf$O)3Bx5P2;$HONA*a6+vx!5v0Y@OhxIl*{dV*VV8BP3$6=?1h*@PXaD;h-o&O(YN&oBd5 z(1$FXKj9I7^EJF`=;U4U@Xiycoi|M$8x`H>Dgzu3{KJ%k9PbrBFREIi|R&2u% z>hoEr{}ZMWe@D%y4>eyBYMk!GmX8M2lK^Vzn{gaNco08g8Wxs`3}7{CJncA(y3$2V z#uwOvZ&9}>P|mr*BGd|%U@q1pyJ1NejcPh3kxLf%(TS`gFNi_?Gq4!7WOb-3IEN`1 z#Z0`4T9G?Q_2m(=d$NoaK@uxtd8<&*L@OriX&R=HLq`--@g{15Y1Bjc3UwkY*omI1 z*eUNuKk*3azvvojo(DLLi`au@tS%dGU>4rTdR)Lv#+TpPK-ccrz`3Z0su^{qedxtO z)Bz_PZ#mAPPT(c7Tk;ikuYEPKyaAjfE=S#>dCbG7n6G>PfrgeSp_X#vHtu%rOSaqf z(-8ZQ>y#0-Pq@Dsww9&?$3sUOk2H;&QL}L%(to~h#2gq3M}{Q+p1oRA_#ZOKnH2y4 delta 1147 zcmXxjT}V@57{Kx8q^^Cq<>qp=<~C7RZkA@XQAmVDNAc8K!E&`##Ao8M{3i_an68b;v49?E)dERr*`|-T*9_8=mAO5N^ z*NMnnR3w3aupXl^k;8^aC-#%yj*GOQG>CX0iC#>j8+Y36y;w`0MF);x08imXL*x=B z$^DHY&Dhx}rc@Ceq9KSmT!jVug=<)`Ok@_P=-@eDnLO`bE8@bB$QWf|E38M~|@y=P{0daU(`jBCByP>WXrx-;EA_yi zqCTIt+ux&){3~jI|4{p@;3dsHsJR&+pn4KUEqxajFpJ&z4t?0rCUOkhQS(XLY1Ea@ zpa);zZhV8fMd5alN^C-{Pz#1}8?qaw^bu^PVFJ0N$W14*h`b<6Sc3`nK}(iFUBL;g z#xeBcdDMzrN2)LPklmAcWbtBjl=^K$Jrh0X(bIICU?mM>=*26j9ZaGg%2%ipS-=D6 z*i<^@2QfsRNB!4aK<(!aj^YdsV2ah%;$;lrE!>Vp^fSKv&;Tp9lm@OtJycz&D;>lj z=1>PL*j}~0k2-;u$ZpAJ)V&R)OZ|rN9C<717Ck`y`#r&WUFj!+HR#PyCQR_#$4@Mm z^QTd;mYhSzgf-~;Ziuzty~j9HoN{*r9YZ7eBg03n-_gc$7>~uRxoEVwBX%}aZd**p N%VBk<*?N|a{09Z4i!cBH diff --git a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index 032ff4d9..a090b9ae 100644 --- a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Bestil" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestillinger" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Personlig information" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Tilladelser" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Vigtige datoer" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Yderligere information" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Du kan ikke hoppe over hovedet!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Luk udvalgte tråde" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Åbn udvalgte tråde" @@ -134,7 +134,7 @@ msgstr "Bekræft et token" msgid "Verify a token (refresh or access)." msgstr "Bekræft et token (opdatering eller adgang)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Tokenet er gyldigt" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "Bekræft nulstilling af en brugers adgangskode" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -191,49 +191,49 @@ msgstr "Aktiveringslinket er ugyldigt, eller kontoen er allerede aktiveret" msgid "merge client-stored recently viewed products" msgstr "Flet nyligt viste produkter, der er gemt af klienten" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brugerens b64-kodede uuid, som henviste den nye bruger til os." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Adgangskoden er for svag" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Misdannet e-mail" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misdannet telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Kontoen er allerede aktiveret..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token er ugyldig!" @@ -276,19 +276,19 @@ msgstr "" msgid "address set" msgstr "Adresser" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Gyldig e-mail er påkrævet for anonyme chats." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Beskeden skal bestå af 1..1028 tegn." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Vi leder allerede efter en operatør, der kan svare dig, så vent!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Modtageren skal være en personalebruger." @@ -551,13 +551,13 @@ msgstr "Med venlig hilsen,
teamet %(project_name)s." #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Aktiver konto" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Aktiver konto" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Nulstil adgangskode" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Nulstil adgangskode" #: engine/vibes_auth/validators.py:13 msgid "" @@ -582,7 +582,7 @@ msgstr "" "oven på en basis-tokenvisning og sikrer korrekt hastighedsbegrænsning for at" " beskytte mod brute force-angreb." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -597,7 +597,7 @@ msgstr "" "tilknyttede serializer til at validere tokenopdateringsinput og producere " "passende output." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -605,7 +605,7 @@ msgstr "" "Repræsenterer en visning til verificering af JSON Web Tokens (JWT) ved hjælp" " af specifik serialiserings- og valideringslogik." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Tokenet er ugyldigt" diff --git a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo index 1fee78563e914b0339615e953d3a2f7ebd5a1592..24f7f77432217d783bef66c03297878b26484cba 100644 GIT binary patch delta 1157 zcmYk*&r4KM6u|NGG;3xwNk`Mt`C*ggq?JxuIulgTLZ;9Rg2D(@9{k<(D~eR=e>K+Irq-%zWKiKAK9i) zM5g^BoA3)(VM#!w%MjU(=ZQyyBHJ)rA(D^Ba21}yTueD$MqZJ$6F)#N@k4xNh|J<< z;<1qJn~<1G3%J*dl<`F|mSP?5#W=QRiHu-|1>S8C8D{dB_fEQ`5DRm6uOdLn8^bYD>m`941MJKMQw_DbX z9_G`Shc{7MJcg@r3dvFCuoCkd>~-o<*X_i0Xksq=%Pj_4`CZgX9%D1kptiDnyM6nc zu$%Za>P9oD?|nwS136?L#4ujLIG({dEWs8oQZb&uHXOhr_Lpe}+L8?F?KJpUx@@Q| zY{ydULQN=zy5Kcuegd_kr^xZkSJe0XQIR#c5wGGN)Q-JGT|a|9&Ooxc${e@UBEJ&h zS0)GeAGF-A?}k{5u1;gX>TrKEQdXO1pCOYsJdq+R5b(LrCc2Z!lf69&Yt|of{SAKk ZgOfW0x67<(Eb!kmAEK52o+*e`{Q*?(ndbli delta 1176 zcmXxkO-NKx6u|NGDs>z!(<~>=nP=04Wty61YEcW3(8z>DilS_sa)Pw-18uSq#Z5sm zOhk(c1X~y(it7j$6%}Z;QK^uSTC}i5g+wX+kM9Y?{O-AL-o59Zciw#InCTe#wK|+F zA`@_{e(ZQr% zPeNVKg?G5W085F-b42#x-<&XuFeut3!bke}(u#~Ad&&&z50_9+Rzmu^U_F-OW#lmO z6jSgWrsEuH0!x^Nad}pv9*ifh!XtP*%s@99z+`-hdV*<;!C5T9ueO=Htw&U6+lr^S z9>Ie+k6SP=-`cnubv-|7LKp4072}A**BDR@=|#de(2ThxijFw<0q>oX1;WKh*`D4e~MOMiw z(8+uR6Y&9RiHC3#jw3nBH2Tn4Y^{@zy6zd=iXlv3e|f|}PyPh;BrotVPNJ65wb$zY zVhj)mQ8$`Iz3&@p4;W-`q7NfjiC1tM)3Az0+KA_{7CSMO{pAe`vk_(Pa0Q4{JyUGSbgKa6^!SIFa+@2K~smx*jfFW$uis1^Hwya+OjnOb5et*jfCB5%p^ zf59=7XuRX6(H&iM_>CLUhWH&cf7Ke@pZE;DzXKw|8Y|dd%pA+dX#3 vGnlb5mssvw8J3o3o1x~0OMz}P&>3uP3kI&Xnax3eQ(KuCYHtrVc4x_d&?%u= diff --git a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index f5d4b8e6..ec66db18 100644 --- a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Waage" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Bestellung" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestellungen" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Persönliche Informationen" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Erlaubnisse" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Wichtige Termine" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Zusätzliche Informationen" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Sie können nicht über Ihren Kopf springen!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Ausgewählte Threads schließen" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Ausgewählte Themen öffnen" @@ -135,7 +135,7 @@ msgstr "Überprüfen eines Tokens" msgid "Verify a token (refresh or access)." msgstr "Überprüfen eines Tokens (Aktualisierung oder Zugriff)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Das Token ist gültig" @@ -174,7 +174,7 @@ msgid "confirm a user's password reset" msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -193,51 +193,51 @@ msgid "merge client-stored recently viewed products" msgstr "" "Zusammenführen der vom Kunden gespeicherten, zuletzt angesehenen Produkte" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen" " hat." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Das Passwort ist zu schwach" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Fehlerhafte E-Mail" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missgebildete Telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Das Konto wurde bereits aktiviert..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token ist ungültig!" @@ -282,21 +282,21 @@ msgstr "" msgid "address set" msgstr "Adressen" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Für anonyme Chats ist eine gültige E-Mail erforderlich." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Die Nachricht muss 1..1028 Zeichen lang sein." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "Wir suchen bereits nach dem Operator, um Ihnen zu antworten, bleiben Sie " "dran!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Der Abtretungsempfänger muss ein Mitarbeiter sein." @@ -564,13 +564,13 @@ msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Konto freischalten" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Konto freischalten" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Passwort zurücksetzen" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Passwort zurücksetzen" #: engine/vibes_auth/validators.py:13 msgid "" @@ -596,7 +596,7 @@ msgstr "" "baut auf einer Basis-Token-Ansicht auf und gewährleistet eine angemessene " "Ratenbegrenzung zum Schutz vor Brute-Force-Angriffen." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -612,7 +612,7 @@ msgstr "" "um die Eingaben für die Token-Aktualisierung zu validieren und entsprechende" " Ausgaben zu erzeugen." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -620,7 +620,7 @@ msgstr "" "Stellt eine Ansicht zur Überprüfung von JSON-Web-Token (JWT) unter " "Verwendung einer spezifischen Serialisierungs- und Validierungslogik dar." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Das Token ist ungültig" diff --git a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo index 2142ffd409f47498e4df905227a2a5400d0f4749..0988a8663d75aacc354bb62d242868f63d20f832 100644 GIT binary patch delta 1159 zcmZ|OPe@cz6vy%NNbAk$SmU2eOJ{V@veZniC@jh(NP{wjkRS=u(r7js2{yeVh^S5R zHg1HrMpWcR3M?uJ6iR5}##$6uMo^@XK~~=%Gqek4=5z0zH}~9g&Yg$7k9r?0Ec1%Y z>{YSZM*M;sFh61zcg*%+8}s{7GrqF460=N?!c>< zg-=ljdyTpqA5a08um=lj&D!w_YM-~L1Aa#(l3vHbiEoV>U>hn>H>v`+P^BBe9K46x z=o#wyY1D>usMh^LWtz{8RfTq;4!RG|;1SfN97kQomsq5LvkX-F@K!VaC05S+Fz<_g zz@2x@UvfL03;v0~S0~}O23s5(9S+v!`jJRcV6d;NzrQDbs?VROkGcOQzl)=z4Uubk MJhLvN#Qy)(Uv5&CumAu6 delta 1150 zcmZY7Pe{{Y9LMqRucmF&tv^%y>*gAnnq`?4hSU?A3;sEDBVhs{&4?e#p*Z@=gH{&~iFp7uP+EOsl* zY%*$Ajz6&!qcO8y$E*R5GJjOY8d}_}5Mmg@YAnFrx%DP2VSWVju?LIs5}tL;Zr~>7 zbL-6#xGrI?`4}Xb>5uzy6}ID6?87uK4&y28-@rz!esgm02BD;c7gI3bY@0;T>FyAAO{&07Iw>#xaOVJu`89cxx_!!yCp5^?E%bABrV+F==AJ(E0 z=tDgpM78KXYQIs`!Ou~Zdz)K#Cm86(G_JvUOksGlSsUI$W%L!#V+KRmxh32Cix^-& zfLgzftvHxl|AuPC9BQ8*sFvi_n9&W_q6|3GnoyVVGOonCNZV}`Rl+H3z!_8qm0S>I zR)flTC#oU`Q59`RwI+pXweU4B;GcI= z-d}&0bJgnz%sS?^2AiFMk$b_~qWrE4y{Eg+c(Zkhg<)B&%$tlxN0PCd#S3fyJuY1o Fw|~EVkJtbJ diff --git a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index f2aacc35..65c64eb7 100644 --- a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,44 +17,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Order" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Orders" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Personal Info" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Important dates" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Additional Info" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "You cannot jump over your head!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Close selected threads" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Open selected threads" @@ -138,7 +138,7 @@ msgstr "Verify a token" msgid "Verify a token (refresh or access)." msgstr "Verify a token (refresh or access)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "The token is valid" @@ -175,7 +175,7 @@ msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -193,49 +193,49 @@ msgstr "Activation link is invalid or account already activated" msgid "merge client-stored recently viewed products" msgstr "Merge client-stored recently viewed products" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "The password is too weak" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Malformed email" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Account has been already activated..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" @@ -279,19 +279,19 @@ msgstr "" msgid "address set" msgstr "Adresses" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Valid email is required for anonymous chats." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Message must be 1..1028 characters." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "We're searching for the operator to answer you already, hold by!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Assignee must be a staff user." @@ -554,13 +554,13 @@ msgstr "Best regards,
the %(project_name)s team" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Activate Account" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Activate Account" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Reset Password" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Reset Password" #: engine/vibes_auth/validators.py:13 msgid "" @@ -584,7 +584,7 @@ msgstr "" "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -598,7 +598,7 @@ msgstr "" " within defined rate limits. The view relies on the associated serializer to" " validate token refresh inputs and produce appropriate outputs." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -606,7 +606,7 @@ msgstr "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "The token is invalid" diff --git a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.mo index 062f2fffe68fb704edeb1c7f8ad040db6291b607..9da8a0475719b42f426c38c021ca7684c86ea990 100644 GIT binary patch delta 1159 zcmZ|OOGs346vy#%dpI+Wk0xJDHja*ET9!2#mI*!}BqCBUB7`6^YP5tHi@@yCqM$`B zy0q*;5z(R-8bt&mR4WOr7DAb;=z$fLE1{w9uNm3}GxNFs|GoEr{^y+k-0Hp8dw+Jm z8!@w&WoD~z2CK0oYS!bJwO|+Ho8@NQvN_DbaD`beR$&n9QS&WWj5{z3d$0)m@Q`D6 z8do#^5;LpB;!1OE0T+#o^k6eC!Cklx`|&j|UPWyvxq^k5pR6)lh^;Hl3a}mbVmB)A z6V$q6sP$f88}CnJE#p{CdILLaTz1Vwk_nQv5#(cU_#u|1upXCFo-pn~Z8V7ucn(W( z3>V=P=HoZ?V+yrFA8D(CrI?M4s7h>g`K2m$6!XwSWpEvRcpF*69%OunA;vz^Sd3w8 z#adJX{iypFP%XNKs?=Rn;E~LD6cxvP&V^na$E7%fL+D#$wj0l&GMd68_!V=pdu_V+ z2@EhkhMIS=6VGSnr%|o=jDIVGYDo&|hHE8t>7F#B4&Pxc!AnTn?GCDh6WD|wP#MKI zAj+T`m2n-aBCV*3cA;8x9M#H;sKAd=hjapi#J5jeXy>z-gY(v>dy|iajJKd#(1DwA z5cBXMYGcn(XJZl-@FylPFV19aPP@h`C|z8!o| zc>(_~$GqSE{mw~mU*NklKME}90H(Fom|2IgLl@B*X Ohl+S+S+K(X|I{Cd0+vGn delta 1150 zcmZY9OGwmF6vy#1P1!uu@-f*1|1)ZtW|^rep@JqY!WIg}&?X8ib;5=sXi?Ljf)=$X z;=k)ji->~IFd_({TDfrua*?@`9#qf+DuaQd@6Q=m!7!hD@67+6d(OEtBZ<3-(Vu>| z#>~==SvCH~a&)3*2YqJkxSRRy7;89(`537%E5J$&V*_fv9arE^%)|W{!2ulfnWeCf z`G-ogDlD!t*A_EqVWuy(;Y#eo229{99=wJ+P;wm`u|CCVmte|2Jt!viFLXriNwNd0{FL@)DWw04z8_ZVW9@IgT*ox9neqOs$dz0umx3#E|+(zV#8R7mr)tq#HDx#*~1>>e2qoS{iIQh5$wVm zR00Xq=NC~ex{j*UeN^Dl-25pjj{BT}9-P3{_z_d+-$Xg_EGnaE9L7&rfbsfl?+;;+ z`7zY`DeS`wx%C-TE8gRLWl$~2Al-1SWOKGBZK%sQh-G*MX}jG+m2eWA_JH|kQ3pep?Y%c~j8GSKY|Y&GLoGXG!Di{=Fb zKYS_gPoUp-#yb%F<}U;qFB diff --git a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po index aaa349b3..b05477e8 100644 --- a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Order" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Orders" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Personal Info" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Important dates" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Additional Info" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "You cannot jump over your head!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Close selected threads" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Open selected threads" @@ -134,7 +134,7 @@ msgstr "Verify a token" msgid "Verify a token (refresh or access)." msgstr "Verify a token (refresh or access)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "The token is valid" @@ -171,7 +171,7 @@ msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -189,49 +189,49 @@ msgstr "Activation link is invalid or account already activated" msgid "merge client-stored recently viewed products" msgstr "Merge client-stored recently viewed products" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "The password is too weak" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Malformed email" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Account has been already activated..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" @@ -275,19 +275,19 @@ msgstr "" msgid "address set" msgstr "Adresses" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Valid email is required for anonymous chats." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Message must be 1..1028 characters." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "We're searching for the operator to answer you already, hold by!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Assignee must be a staff user." @@ -550,13 +550,13 @@ msgstr "Best regards,
the %(project_name)s team" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Activate Account" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Activate Account" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Reset Password" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Reset Password" #: engine/vibes_auth/validators.py:13 msgid "" @@ -580,7 +580,7 @@ msgstr "" "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -594,7 +594,7 @@ msgstr "" " within defined rate limits. The view relies on the associated serializer to" " validate token refresh inputs and produce appropriate outputs." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -602,7 +602,7 @@ msgstr "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "The token is invalid" diff --git a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo index 7c94cd3d318fc9c7d4f98f7643319cc34416cc7b..ed20e7941b4126b83e8d5aa8d5c158a693cceb36 100644 GIT binary patch delta 1157 zcmYk*OGwmF6vy%3Uu~SR@{yBIoEg)~NA|F^6njvT!35SK5P~9nq(mk;QBXFUs21j; ze=8{nN+E~}6k13Nu|>0}j1UT>79oMX>>;%=`W|MeK>gfv{r~U1=bZb05}AxV_>mkf zlJqPfRp3V~!`z_M=14p6B=Jy4T8DYXQU>n9Ol-mB*o8|miY%ckn2LANkE1x@NHN@K z|1XisalAxPEn@J22|LJFEWnIXX)9J>I7#ZnJ1j7|O6p_&5U2FwG*;mZp22KZwT=4| zUc=SI*D=QXkFk+>pfdj6%gU%!&xEr^VonWMh@BY13s{XqNHO#Zv+x(%LTT)78#JS3 zdKz=E9~a{-w8ZYCRq!eLZ~=E=YILncatdQQ_MiuC-YRnu*JFReN0>|e8S~J?s=G0W zR&_%K-Qqd)qo*eRVj*o1bl zX0%qdVF<6HWioLrd&67L_rWXJ8oy_!Rg`#8;+$ z{GNAx-tUgw1#hc!&OPG$;`F)u)54BMZlqQF-C(fDceb}Z66xwb+UrgQO1yuA-+|Cb XLvXObt*S5l@0sbk;(yO1*O&hRBXgRZ delta 1155 zcmXxjT}YE*6u|MbS!6F3U*Uq1l?GE6rmZF7lGLu)y486 zf)^s9D81_AqJbCEg&4#jsjQ%&kBgAND69yD2vYi=_6lRa=RDhcp68tBd0+KC?aR&; znCnGkG9prizp(-%QISrENE4nS9x_BWVK64*#}*7=E0$mvF2{Z(gU36*|ef z3(HYE){eS?JGc@@ZJ(j${e+r#+K$Z`25d%Vu?%CZ){BkUhWBv=dh0|kVFd>XGEo&HD10f!^X745G6>|6mC9F6=>ykxuN! zYp6%y+?F?tTx^NkaVs7t?!hknfTh^HJ%1zzFiqTzWvnlw3_|!C`LBFM-Ko)#uP}wW zu{7#Y9YO=IpjPq_wNo#UYazc-TW%!sM^}v*;wIEi<&YOi-eQHe>MsMWw3b(ax8(ni zdr>Tpd)6^v&AU4s=d8n?pAND1dDD)wBe%TqpsV9V?~!9it%XF$@\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Saldo" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Pida" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Pedidos" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Información personal" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permisos" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Fechas importantes" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Información adicional" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "¡No puedes saltar por encima de tu cabeza!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Cerrar los hilos seleccionados" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Abrir los hilos seleccionados" @@ -134,7 +134,7 @@ msgstr "Verificar un token" msgid "Verify a token (refresh or access)." msgstr "Verificar un token (actualización o acceso)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "El token es válido" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "Confirmar el restablecimiento de la contraseña de un usuario" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -191,50 +191,50 @@ msgstr "El enlace de activación no es válido o la cuenta ya está activada" msgid "merge client-stored recently viewed products" msgstr "Fusionar productos vistos recientemente almacenados por el cliente" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "El uuid codificado en b64 del usuario que nos ha remitido al nuevo usuario." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "La contraseña es demasiado débil" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Correo electrónico malformado" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de teléfono malformado: ¡{phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: ¡{attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "La cuenta ya ha sido activada..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "¡La ficha no es válida!" @@ -278,19 +278,19 @@ msgstr "" msgid "address set" msgstr "Direcciones" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Se requiere un correo electrónico válido para los chats anónimos." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "El mensaje debe tener 1..1028 caracteres." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Ya estamos buscando al operador que le responda, ¡espera!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "El cesionario debe ser un usuario del personal." @@ -555,13 +555,13 @@ msgstr "Saludos cordiales,
el equipo %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Activar cuenta" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Activar cuenta" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Restablecer contraseña" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Restablecer contraseña" #: engine/vibes_auth/validators.py:13 msgid "" @@ -586,7 +586,7 @@ msgstr "" "construye sobre una vista de token base y asegura una limitación de tasa " "adecuada para proteger contra ataques de fuerza bruta." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -601,7 +601,7 @@ msgstr "" "velocidad definidos. La vista depende del serializador asociado para validar" " las entradas de actualización de tokens y producir las salidas apropiadas." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -609,7 +609,7 @@ msgstr "" "Representa una vista para verificar tokens web JSON (JWT) utilizando una " "lógica específica de serialización y validación." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "El token no es válido" diff --git a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po index 13dd9204..4cb8f73b 100644 --- a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/fa_IR/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-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,44 +16,44 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "" @@ -133,7 +133,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "" @@ -170,7 +170,7 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -188,49 +188,49 @@ msgstr "" msgid "merge client-stored recently viewed products" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:327 engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -268,19 +268,19 @@ msgstr "" msgid "address set" msgstr "" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "" -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "" -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "" @@ -527,12 +527,12 @@ msgstr "" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" +msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" +msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" #: engine/vibes_auth/validators.py:13 @@ -550,7 +550,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -559,13 +559,13 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "" diff --git a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo index f437dddd353c2aae325e88ef82039d8eecc829dc..0c3e342b80e020c508fbebc2287aa0df5b090212 100644 GIT binary patch delta 1161 zcmY+@O-Phc6vpvqOmo!CkJL;Z$I8k~&9p3SvM@{|DvgMUgv>O;2tq3|YoH*b?|3(A zMlNb2Edoi3s1RBxiH0i!qXNN&ftf)N^zlEA6s>;u+`0GMbI*IHwW+h|@wYjCkEFp= zDHA_q1}^kUM_ketyh8jiOG1!8!*oLIgBb-}YqLoq@_Ms&l#)}xtE!^0G5qKLD zu>;50{{%~k+p_}uK4$r)olL}LOL=$*m!X3csb{nE?{NunbdD5<`DlsCk(zW9tph!1 z9qmUeWE>Ol3l?DL>OkSeSV3IwXJ851&|2Dy*1BN~#dl~MKh2t$E5#GEz5fim&8#~d#7kC^iX-gEo#A`T+(RhFl7>V_0 zpW-Z9%P(Oy-op7fg~6z`fewY>BEm%EC%^I-Y-OSj3$Y9B4UAzK{>Ef1TNk)#4cd)* z&<=iuvDlCCIEr?mugF$q(>{hejJ#*H;&Ob75uC3N46LFFOu!JH`d&;y+i(&s;T^P& z44^&M!VMA+TKkdrrzW&F^8im_AJ$_rx3c_QxBy>cC5~V+=PQ%!@wg3(@gVXUbr-Fr z1DJ#(Xq8W+y_uwqQW}8NS1%?t9^RagNvP2|L$N+t_&Q#L))lzAwRF)IV3f}o&94-1Qk9`rqqu0H2p=AL`*`JWl;9O%6BJtB}RDdd)N z@F!-X+an!vBp>#$zU7rRWBzI>0b4NvVKVk3DRdhn@hN6w2xlB=4mYrVo+WL> ze_0C5|FDE#*}-y5$7bA(r?Gp9G=|?uP_s_zW4|mJ|5H7{Sl6N@_G2TS#ceo+ zt1y*u zTDnDIpw)!TpU$Ao%n)|qI3C3cUS;`*aRolc2AswW?pF@kQ?Lpvu^IV{x{lV;NleFS zw904EW+rv39*n~&w9d@n4g82n*zF4!Jb;-zT2Bb%CK5cEgSItn(#)H>%zZ^o3kBHK=$IDDi%_`{vG7`ig^tKF@#a!<(@H diff --git a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po index f596cf53..25dcd7c6 100644 --- a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Commande" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Commandes" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Informations personnelles" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Important dates" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Informations complémentaires" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Vous ne pouvez pas sauter par-dessus votre tête !" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Fermer les fils sélectionnés" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Ouvrir les fils sélectionnés" @@ -137,7 +137,7 @@ msgstr "Vérifier un jeton" msgid "Verify a token (refresh or access)." msgstr "Vérifier un jeton (rafraîchissement ou accès)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Le jeton est valide" @@ -176,7 +176,7 @@ msgid "confirm a user's password reset" msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -194,51 +194,51 @@ msgstr "Le lien d'activation n'est pas valide ou le compte est déjà activé" msgid "merge client-stored recently viewed products" msgstr "Fusionner les produits récemment consultés stockés par le client" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "L'uuid b64-encodé de l'utilisateur qui nous a recommandé le nouvel " "utilisateur." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Le mot de passe est trop faible" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Courriel malformé" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numéro de téléphone malformé : {phone_number} !" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair} !" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Le compte a déjà été activé..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" @@ -283,20 +283,20 @@ msgstr "" msgid "address set" msgstr "Adresses" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Une adresse électronique valide est requise pour les chats anonymes." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Le message doit comporter de 1 à 1028 caractères." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "Nous sommes en train de chercher l'opérateur pour vous répondre, attendez !" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Le destinataire doit être un utilisateur du personnel." @@ -567,13 +567,13 @@ msgstr "Meilleures salutations,
l'équipe %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Activer le compte" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Activer le compte" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Réinitialiser le mot de passe" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Réinitialiser le mot de passe" #: engine/vibes_auth/validators.py:13 msgid "" @@ -599,7 +599,7 @@ msgstr "" "vue de jeton de base et assure une limitation de taux appropriée pour se " "protéger contre les attaques par force brute." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -615,7 +615,7 @@ msgstr "" "valider les entrées de rafraîchissement de jeton et produire les sorties " "appropriées." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -623,7 +623,7 @@ msgstr "" "Représente une vue permettant de vérifier les jetons Web JSON (JWT) à l'aide" " d'une logique de sérialisation et de validation spécifique." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Le jeton n'est pas valide" diff --git a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo index 2da8e296288131d992ce9b4686635f489a95b3b5..2b32a8074fd1d5fac51f5c0c74f1f326330d5ced 100644 GIT binary patch delta 1157 zcmYk*OGs346vy%36v2$C2oeScM%!png!EWMAVejS5-zO1rx~i%=YP)J`~RQ+nRCawCc1`a7svgQ zUIe6d_yyNseo#8;k!rD*c+ioyV0lQ&#um)QSSr4nitk{U{4jd)0~X;Fe)LF73#BUJ zZzOB5q*(Dk54ILd>q)euy)b|cIF9i}Qf7(tgAHz$N&Vz|*Cr1rpz3YJA?(A$n1-KI z&Y=}(pWcTI>7JT0Vq! z@B-QmyiAnMOdi^M)mV*3(7^;UJ{rZ<_ztau^O(;0a+shj5@F228r+Qs(7^%ZGJ1l| zIE{I@kGAoF=r}rf8Lcz-@e+>XIjp4`2S?G~dxJ;uD~32<^*fRkoxv#aZFKMz+D+%s zI$-UwSqLH@g6fbDL>GY0m|Bf7)J;M((CnXYRe{{LlU0>4Esbv!5%yN=Y+e zsT_Y{2*btFDMyOpF!7ix?ZC>2l!aZGgZ-)adMdt$)#RUG8h*r5oWoC!w5CMbMLbWk z2_t3l{$JQ#CT%8h9_@xvY{xiyE2Q8?n&SbtDx?_st5wMYIh&;2#38(cM=*$=Q!b)4 zp1>*Yuc1gQ@%Jqfk5GNJC$+HXp>0cyqfKHKX<7-)#_(2tSc?VNfrqdcZGv&k!#T{v zKbVdg+awnY&>Cq#%lBg^4tgwX=d);?J2lA*(s3>E2DAc|DLc>_96&auF^uACti!-| zDIc3K7dtV4eVBol(CQ4MHR8os>|yZ$?cKk_5nRH(QQf5E-tgvn-C17{vx$KpTA(+iAu&w9(&28~Hd|;ooRG zSjCC5Gn0vSUme!tF?2D893M?!5xz&8;1Z@&UqzgtOcGU?jSaXT+tI~QWHWk+UHBDq zv6Zp$f#^88ID|Hthj<0!coCy?=2P848;`wv z`GK?_&Sn2^T8}g2cL%;X@;icU&fw(zU~SIop8mem=g#;`;nL-$TkQHX;qYX0@wL!$ RZXsH}yew?2@Ta3C{{Y2OnIr%J diff --git a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po index a7eceb48..21ef73bf 100644 --- a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "מאזניים" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "הזמנה" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "הזמנות" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "מידע אישי" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "הרשאות" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "תאריכים חשובים" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "מידע נוסף" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "אי אפשר לקפוץ מעל הראש!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "סגור את השרשורים הנבחרים" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "פתח את השרשורים הנבחרים" @@ -134,7 +134,7 @@ msgstr "אמת אסימון" msgid "Verify a token (refresh or access)." msgstr "אמת אסימון (רענן או גש)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "האסימון תקף" @@ -171,7 +171,7 @@ msgid "confirm a user's password reset" msgstr "אשר את איפוס הסיסמה של המשתמש" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -189,49 +189,49 @@ msgstr "קישור ההפעלה אינו תקף או שהחשבון כבר הו msgid "merge client-stored recently viewed products" msgstr "מיזוג מוצרים שנצפו לאחרונה המאוחסנים אצל הלקוח" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "ה-uuid המקודד ב-b64 של המשתמש שהפנה אלינו את המשתמש החדש." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "הסיסמה חלשה מדי" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "דוא\"ל פגום" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "מספר טלפון שגוי: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "פורמט תכונה לא חוקי: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "קישור ההפעלה אינו תקף!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "החשבון כבר הופעל..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "משהו השתבש: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" @@ -272,19 +272,19 @@ msgstr "" msgid "address set" msgstr "כתובות" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "נדרש כתובת דוא\"ל תקפה לצ'אטים אנונימיים." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "ההודעה חייבת להכיל בין 1 ל-1028 תווים." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "אנו מחפשים את המפעיל שיענה לך, אנא המתן!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "המקבל חייב להיות משתמש צוות." @@ -541,13 +541,13 @@ msgstr "בברכה,
צוות %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | הפעל חשבון" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | הפעל חשבון" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | איפוס סיסמה" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | איפוס סיסמה" #: engine/vibes_auth/validators.py:13 msgid "" @@ -570,7 +570,7 @@ msgstr "" "(גישה ורענון) באמצעות אישורים שסופקו. היא בנויה על גבי תצוגת אסימון בסיסית " "ומבטיחה הגבלת קצב נאותה כדי להגן מפני התקפות כוח ברוט." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -583,7 +583,7 @@ msgstr "" "אסימון רענן בתוך מגבלות קצב מוגדרות. התצוגה מסתמכת על הסריאלייזר המשויך כדי " "לאמת קלטות רענון אסימונים ולייצר פלט מתאים." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -591,7 +591,7 @@ msgstr "" "מייצג תצוגה לאימות אסימוני JSON Web Tokens (JWT) באמצעות לוגיקת סידוריות " "ואימות ספציפית." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "האסימון אינו חוקי" diff --git a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index 36b7c2ae..d8c12024 100644 --- a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,44 +16,44 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "" @@ -133,7 +133,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "" @@ -170,7 +170,7 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -188,49 +188,49 @@ msgstr "" msgid "merge client-stored recently viewed products" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:327 engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -268,19 +268,19 @@ msgstr "" msgid "address set" msgstr "" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "" -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "" -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "" @@ -527,12 +527,12 @@ msgstr "" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" +msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" +msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" #: engine/vibes_auth/validators.py:13 @@ -550,7 +550,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -559,13 +559,13 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "" diff --git a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po index 13dd9204..4cb8f73b 100644 --- a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/hr_HR/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-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,44 +16,44 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "" @@ -133,7 +133,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "" @@ -170,7 +170,7 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -188,49 +188,49 @@ msgstr "" msgid "merge client-stored recently viewed products" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:327 engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -268,19 +268,19 @@ msgstr "" msgid "address set" msgstr "" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "" -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "" -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "" @@ -527,12 +527,12 @@ msgstr "" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" +msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" +msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" #: engine/vibes_auth/validators.py:13 @@ -550,7 +550,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -559,13 +559,13 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "" diff --git a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo index ff57d51bdf2b0b648ea390ca16e15eeae9574378..b6c02c45ede4362e231d81d55770c33fe635ee1e 100644 GIT binary patch delta 1157 zcmYk*OGs2<6u|LwO>OS=(P(4SSo3Nk&1a3)6c{~(W>Je=6jVboWr-6slmj7_(?SSg zLgdn8BP~RT77@(OMIh3mh&E;r7F3IHA-NbSh+hBWTq+pu?>pc99_KsXoso1d{bXfL z)-NKj0wPVggpKG8iu4*H2UOyzkVqR^VUa4_>lnvM;^U6z&_|rcwK$43IF4h6$RxHB zcSMT&B_ooRQaW;UY|w#NhYxWdKE>)1ksp|2fr@P+SLnarAgl8%vfW6$4liOOmg5+@ z@GjQl1H8)oY1~QN%4xUb*`}<>AsVA}u(rHJ4lM=Lh1WM1C$yk0bOvj25O-q^H{&c; z;|J&cGHN0vEyaqOs1=N&RwjuZ*q^1rSeZZzpQBEEjg`27TX4~_g8J!|wK*QeJ;W)D z;v{MX-=HSCgk|^}b^S83(8{<`E1&hzpehnTy}LM$U=kDf8NJxuF4BjmQSWpXb%S}- z4HljF3!Wl2b`-yr1nNd9bYmJlcoVm>zucj*pN?tdC*OH!shhbdJ<(y*1P1XSj-zfk zhg!I3SK5wzE^-3(N{3OuwR>2~{_>bc4IO!`!e_`&=6Gl#xkc@CQxv+_!2ddFzU&>Q0FDljVZj1Lr!dR8cnz!{aTt%8eE$skblW)+4Q8t zw&^MuV*hlVH?G@BbJ@6I_gF^^$xm2Oj~xv9&7pw{nN0uXz5#na5OMtteg#7LuHb^# Sz7+HQH^v_e{TtIAYxo0>os#+h delta 1147 zcmXxjT}V@57{Kx8m^+(mE{#oVwU3%Louy^jyihE?Fo+<7D6BSB?7K^XlXcLrm>=XuZG_kG^yJsZmmXCD4o zmaP?$*@(zS{EcCZL`6;*BCRU*zDMeKJsqIqqv%U0Npr(m6*e8hR8T> zCU1<3BrzSAtdtUrGEk*I#30_qHhhHs5|KYR#sY4tJj3|Sge=W7seTpta4?UEkmyJ?KO2d^Sj+6^2mnt`mnbjYsekR%3gkNIxD#z0(=g4PKyb zFz@7Fu!npR%kj{b!bTQWkPl!0hp>kI_@%Qi>U9Kjiu}__X#Q)cz{~*W8@=qd}$#iTvQ6f zxDOAYE^rU^`7~28>bx{opoKZS;N&h&vw^${!@6NBfu7(L@-JCxo1Rqc zGS7l>$zJsI8kg\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Keseimbangan" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Pesan" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Pesanan" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Informasi Pribadi" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Izin" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Tanggal-tanggal penting" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Informasi Tambahan" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Anda tidak bisa melompati kepala Anda!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Menutup utas yang dipilih" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Buka utas yang dipilih" @@ -134,7 +134,7 @@ msgstr "Verifikasi token" msgid "Verify a token (refresh or access)." msgstr "Verifikasi token (penyegaran atau akses)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Token tersebut valid" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "Mengonfirmasi pengaturan ulang kata sandi pengguna" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -191,50 +191,50 @@ msgstr "Tautan aktivasi tidak valid atau akun sudah diaktifkan" msgid "merge client-stored recently viewed products" msgstr "Menggabungkan produk yang baru saja dilihat yang disimpan klien" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "UID pengguna yang dikodekan b64 yang merujuk pengguna baru kepada kami." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Kata sandi terlalu lemah" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Email yang salah" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Nomor telepon rusak: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format atribut tidak valid: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Tautan aktivasi tidak valid!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Akun sudah diaktifkan..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Ada yang tidak beres: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token tidak valid!" @@ -278,19 +278,19 @@ msgstr "" msgid "address set" msgstr "Alamat" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Email yang valid diperlukan untuk obrolan anonim." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Pesan harus terdiri dari 1..1028 karakter." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Kami sedang mencari operator untuk menjawab Anda, tunggu sebentar!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Penerima tugas haruslah seorang staf pengguna." @@ -554,13 +554,13 @@ msgstr "Salam hormat, tim %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Aktifkan Akun" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Aktifkan Akun" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Atur Ulang Kata Sandi" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Atur Ulang Kata Sandi" #: engine/vibes_auth/validators.py:13 msgid "" @@ -585,7 +585,7 @@ msgstr "" "tampilan token dasar dan memastikan pembatasan laju yang tepat untuk " "melindungi dari serangan brute force." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -600,7 +600,7 @@ msgstr "" "bergantung pada serializer terkait untuk memvalidasi input penyegaran token " "dan menghasilkan output yang sesuai." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -608,7 +608,7 @@ msgstr "" "Merupakan tampilan untuk memverifikasi JSON Web Token (JWT) menggunakan " "serialisasi dan logika validasi tertentu." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Token tidak valid" diff --git a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo index e850c3c626554047f658fd56161e4c1eb044a9b3..3dbe97d30607acbc8dddb6557b089294ed66a931 100644 GIT binary patch delta 1179 zcmYk*OGuPa6u|K_X*Oe)HV)co^ROvPtu!mmvI?z!K0DbOFd@g*Vb z5Rp-*NIrhRrI_gwX)=jy!o9?OZjse!%@LW0RhWi5Fcn)d3lE|PPh%1e8TnznW)d04 zLh{FXNFDM>c>2M&B>11ikUhn^NMsupWBv@0!+4JcqPZeR$hT3Y1wY~n{DvL4Bu``( zo<%L77xiHMc$4{0a6NH%LA-$b1!0j&5}!$E<)zC++_)1p?!sd1MJ?Bcpv^XgDLvKu)=Sh^ULlZYC=!E9m={nD0gGR+@@H0W3_V|kd34bb)9plFa2#av%icn(3ZVIU0@2SLCkAJ_#mVl zX@WFhJ@#NGP8j~cg~Ya!_`6ez`-$t(izAqUMWylet8g=M1KQbNE;7&u?qCHzLR~P0 z3)PbrqMon>^#of{3u{L0)G^c(T|sV9hEeCm(1u^}B&L+b3pkH@)dT3z&trrE*CkWP zS0cImw(~m_v6v@K68UM~W9o`DT0WUVk-Fq+lMG%+F1AHnE{CPl?+pZ6e9ivInA2na w8~k#*2P<41Ssq_wyEo+a?en?4{uY10yUyJi47N0da^&C4TV?;v952iJ1Aq6YasU7T delta 1147 zcmX}sUr1AN6u|LwZP~VHnl5dc+iDr<%xbG_Y9K5^SW-b*PerU8Mx=t257tB|UxKI` z5uru(Fi4_e`VdIcOAkdxDD>y0K~xYU36+BA&-b`%FZ=w?x%d8l=XZYhF4cXj`{C@O z;eA8o z4Q?cVo}1LsfF$Q{{6vCll10`O*IJPlti|d)kzO2Uf)rKulTT2!1HWP|&SED9szjFH zRn!6ou^R842JLo-opZ1v6*wjN-V@-T!v$) zJAIBzaSD%M2K6YKXrC_JjQU&)YDW$udq_$Tg9Z{Q%a2%2?4w`WvIc%uVF&KUi>Nzz zXPLob;xAZ)zmU@u7jLX~t{z!P5~%ZBLw(89XlH$S%|KiB9(986NDX4!%9nt3NE4(L z58(ioV#e|(t|2bmmV0-?*hRb_kK;2e!J4|<{85Y&x1xvj=*Ahmg!V|Tfa}NyBg0ss4@@!8v$xfY@RiK} z7wknb9rhXHtohp>H_n+y9n*%G`\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Equilibrio" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Ordine" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Ordini" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Informazioni personali" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permessi" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Date importanti" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Ulteriori informazioni" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Non si può saltare sopra la testa!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Chiudere le filettature selezionate" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Aprire le discussioni selezionate" @@ -137,7 +137,7 @@ msgstr "Verifica di un token" msgid "Verify a token (refresh or access)." msgstr "Verifica di un token (aggiornamento o accesso)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Il token è valido" @@ -176,7 +176,7 @@ msgid "confirm a user's password reset" msgstr "Confermare la reimpostazione della password di un utente" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -194,49 +194,49 @@ msgstr "Il link di attivazione non è valido o l'account è già stato attivato. msgid "merge client-stored recently viewed products" msgstr "Unire i prodotti memorizzati dal cliente e visti di recente" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "L'uuid b64-encoded dell'utente che ci ha segnalato il nuovo utente." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "La password è troppo debole" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Email malformata" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numero di telefono malformato: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "L'account è già stato attivato..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Il gettone non è valido!" @@ -281,19 +281,19 @@ msgstr "" msgid "address set" msgstr "Indirizzi" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Per le chat anonime è necessario un indirizzo e-mail valido." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Il messaggio deve essere di 1...1028 caratteri." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Stiamo già cercando l'operatore per rispondervi, restate in attesa!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Il destinatario deve essere un utente del personale." @@ -559,13 +559,13 @@ msgstr "Cordiali saluti,
il team %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Attiva l'account" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Attiva l'account" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Reimpostare la password" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Reimpostare la password" #: engine/vibes_auth/validators.py:13 msgid "" @@ -591,7 +591,7 @@ msgstr "" "un'adeguata limitazione della velocità per proteggere dagli attacchi brute " "force." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -606,7 +606,7 @@ msgstr "" " vista si affida al serializzatore associato per convalidare gli input di " "aggiornamento dei token e produrre output appropriati." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -614,7 +614,7 @@ msgstr "" "Rappresenta una vista per la verifica dei JSON Web Token (JWT), utilizzando " "una specifica logica di serializzazione e validazione." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Il token non è valido" diff --git a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo index 7bba30c98f3744fb71d2633850ac8cbbbba6b52b..523e3252b4073d2be6b9a7db475fcaff1ef3178d 100644 GIT binary patch delta 1177 zcmYk*TSydP6u|K_ZOE=fmS`=>&TL*PTD)Xl%WEc7cG1nuB#BUy4GKzw^3pB@Nmvgt zQfQbDkq_3A_|Ba_ z7IJ>?!BXZ2aLy2Ug5|_^wn!b$Wk*HI7zA>h!Y#Okcn~#l7Pq4}SA^OUM(sck4&W6m zLX%TdTlS$IEQSeq2{msBb>Bzs{BLX}PKa(0$!E}xns60$gX^xhP+RrD^&4uZib&!T z(v13Q&ZAyr2K9ixjgDEEL|l!!e*^0N&92c72AX&hwUu}9Exy4x-Y#%9Xes12#78j| zzoTxnl(z;t|uG%qS27*sN`f-hq$Hleou8tVK!@?A=5 ziO7B|KrMXHbr}7`kOG1P0UZREi2&b?ds_6jvVjovggeV@4w)e s8JsG!s)KeyRoQ=Q&Qk{mA) zk%TF-1%F{4n)xDU43RxJK>Wxf(u}2E5jS3R97GrKgyRer5iemDN`bw8Ev6-jY{Q*Q z*RZG_&lgEtG8s%VL5{q^3S7b_%-k$8L}Cyt@LRFSP3G5c9~yADIZB(LOM`i z%{A1E%%UDJrOMWeS;T(S{aaD@?{JKFG0?_k9Pgrwcnq`gEz(^{pyvHWN{Gp(8XrOJ;3dqaz6>+a4JRC5VVL*>>N_p26FH6{ zjNlaNMmf7}t57=^!a}@)qd0;mu$J~}$A;03lNiETG^sCcK1nT9hx_p?>cVHJ2b)JN zxQJTlC%VvGZ^zZB>yM${{4#3ZIBMZ(ypMCJd12bxjxo&B)+88k7)fam;aBqizaWTW zrKc?$z1E+!uyNJuO8;(%)t=E}#HL3xd^xG%3*C|EIqQd6xH|OYd#r?MPB-K?dRFH? g1`g%gE6anS!v~w2I!?7Uwl?>Atda(=)fe#p13$-`=l}o! diff --git a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index 2ac9e307..83c62b42 100644 --- a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "バランス" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "オーダー" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "受注状況" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "個人情報" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "アクセス許可" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "重要な日程" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "追加情報" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "頭上を飛び越えることはできない!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "選択したスレッドを閉じる" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "選択したスレッドを開く" @@ -131,7 +131,7 @@ msgstr "トークンの検証" msgid "Verify a token (refresh or access)." msgstr "トークンを確認する(リフレッシュまたはアクセス)。" -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "トークンは有効です" @@ -168,7 +168,7 @@ msgid "confirm a user's password reset" msgstr "ユーザーのパスワード・リセットを確認する" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -186,49 +186,49 @@ msgstr "アクティベーションリンクが無効であるか、アカウン msgid "merge client-stored recently viewed products" msgstr "クライアントが最近閲覧した商品をマージする" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "新規ユーザーを紹介したユーザーのb64エンコードされたuuid。" -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "パスワードが弱すぎる" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "不正な電子メール" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "電話番号が不正です:{phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}です!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "アカウントはすでに有効になっています..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "トークンが無効です!" @@ -268,19 +268,19 @@ msgstr "言語は {settings.LANGUAGES} のいずれかで、デフォルトは { msgid "address set" msgstr "住所" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "匿名チャットには有効なEメールが必要です。" -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "メッセージは1〜1028文字でなければならない。" -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "今、オペレーターを探しているところです!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "担当者はスタッフユーザーでなければなりません。" @@ -534,13 +534,13 @@ msgstr "よろしくお願いします、
%(project_name)sチーム" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME}| アカウントの有効化| アカウントの有効化" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME}| アカウントの有効化| アカウントの有効化" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | パスワードのリセット" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME}| パスワードのリセット" #: engine/vibes_auth/validators.py:13 msgid "" @@ -560,7 +560,7 @@ msgstr "" " JWT " "トークンのペア(アクセスとリフレッシュ)を取得できる、トークン・ベースの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築され、ブルートフォース攻撃から保護するために適切なレート制限を保証します。" -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -571,13 +571,13 @@ msgstr "" "認証目的のトークンのリフレッシュを処理します。このクラスは、認証システムの一部としてトークンのリフレッシュ操作の機能を提供するために使用されます。このクラスは、クライアントがリフレッシュされたトークンを定義されたレート制限内で要求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行うために、" " 関連するシリアライザに依存します。" -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証するビューを表します。" -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "トークンが無効" diff --git a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po index 36b7c2ae..d8c12024 100644 --- a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,44 +16,44 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "" @@ -133,7 +133,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "" @@ -170,7 +170,7 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -188,49 +188,49 @@ msgstr "" msgid "merge client-stored recently viewed products" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:327 engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -268,19 +268,19 @@ msgstr "" msgid "address set" msgstr "" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "" -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "" -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "" @@ -527,12 +527,12 @@ msgstr "" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" +msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" +msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" #: engine/vibes_auth/validators.py:13 @@ -550,7 +550,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -559,13 +559,13 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "" diff --git a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo index 530a4dfa4288f92e379c149cb4e72d8d19d45eca..b06fa5a71f4dcaf30c7d8543bbffc0a200d33ba9 100644 GIT binary patch delta 1157 zcmYk*OGwmF6vy%3WQj9n8i|Ubqo}2+SypC)RQ6b;5^A)Nh*C4tpr{!^tei!-Xb~BI zY8P50LRdr^ghhr#L7|H=8_hLK_xOfOBebNMOB;S`S72>m8 zMdv$yCt(9;oymDpC2LkM=mv;3ndJ%*JW76PU$Dj4zSa;Ssd_WlY2Yv<2S9 z6nucz@1@KC!a8C_$+9WcqYdanzsp;Ek=Pd2hjuk%n2n#Di%VlCm5+9X&6tLlFck;U z>ODrQ_uM(@j84;_mfj<$tiXC{980kkXD}HL@BoJJ7+So%ELJ#(%ZLjxfaQ1?t1u34 zpiMl8D{&a}@hMU&s?RhwlSt=f*xl?y+wm3TqepzLz!}_&KJLQ`);Jr`7SxD|*n!-p zy3p?a7H-7}v_K~kSCRLt zQ9O-ru^Fqk#3sIj_Q+pjHGZ=^^Q)pFR`3w+B95S~^dZ{aeZ)2R1#L%3Y$p{<(Bj>g zhRtaGy3xknMBCUfhH(s&a2-#d_p5D~X-9E_2G^`>$iHO%LDpf9=TG?IllLc~#dpqY z^3V9rd-Z`DpGK|+%2K>wFw=iF+!~3rpKJ?zZ?bX|{s(he*&~&~zZsqvDqhg1Dzu
0iSPXt(fPPkak$exU)(L(iYZi;qdeKHV-Z7?7H}nL% z=>HD45$_F)MDc1kK|tdb3Eqisg$R#qHFjVXaX;EPiFyLl*o0Y?A}jF_YW_0j;{fUc z@1qxoQNMd(@-x^#{3k(!P02pqYKJ(w@r;RkQ5V*SdR3!n<42>c%A8a&R*-K-A6~*j zOrnnW7=1Y58M zvvCl0;v_D{AuPeC$WRISL}MKZFO{KpQ-`|aE65{{_*sNgxEp6t2i(cMsP(7|I)M4u zhTNvaQSbg1Zp1Ov4gNwsDL<3Cm|u3$(2o0!hfx=D0+-+e+=3H$5EoQujy7gIjar1) zkouJrp29cSiaXY4CccMS E2V)48$p8QV diff --git a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po index 214a1fde..b19498eb 100644 --- a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "잔액" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "주문" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "주문" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "개인 정보" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "권한" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "중요한 날짜" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "추가 정보" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "머리 위로 점프할 수 없습니다!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "선택한 스레드 닫기" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "선택한 스레드 열기" @@ -130,7 +130,7 @@ msgstr "토큰 확인" msgid "Verify a token (refresh or access)." msgstr "토큰을 확인합니다(새로 고침 또는 액세스)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "토큰이 유효합니다." @@ -167,7 +167,7 @@ msgid "confirm a user's password reset" msgstr "사용자의 비밀번호 재설정 확인" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -185,49 +185,49 @@ msgstr "활성화 링크가 유효하지 않거나 계정이 이미 활성화되 msgid "merge client-stored recently viewed products" msgstr "클라이언트가 저장한 최근 본 제품 병합" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "새 사용자를 추천한 사용자의 b64로 인코딩된 UUID입니다." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "비밀번호가 너무 약합니다." -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "잘못된 이메일" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "잘못된 전화 번호입니다: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "잘못된 속성 형식입니다: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "활성화 링크가 유효하지 않습니다!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "계정이 이미 활성화되었습니다..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "문제가 발생했습니다: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" @@ -267,19 +267,19 @@ msgstr "언어는 {settings.LANGUAGES} 중 하나이며 기본값은 {settings.L msgid "address set" msgstr "주소" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "익명 채팅을 하려면 유효한 이메일이 필요합니다." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "메시지는 1...1028자여야 합니다." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "이미 응답할 교환원을 찾고 있으니 잠시만 기다려주세요!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "양수인은 직원 사용자이어야 합니다." @@ -535,13 +535,13 @@ msgstr "감사합니다,
%(project_name)s 팀" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | 계정 활성화" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | 계정 활성화" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | 비밀번호 재설정" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | 비밀번호 재설정" #: engine/vibes_auth/validators.py:13 msgid "" @@ -563,7 +563,7 @@ msgstr "" " 쌍의 JWT 토큰(액세스 및 새로 고침)을 얻을 수 있는 토큰 기반 인증을 처리하는 프로세스를 관리합니다. 기본 토큰 보기 위에 " "구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 적절한 속도 제한을 보장합니다." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -575,13 +575,13 @@ msgstr "" "사용됩니다. 클라이언트가 정의된 속도 제한 내에서 토큰 새로 고침을 요청할 수 있도록 합니다. 이 보기는 연결된 직렬화기에 의존하여 토큰" " 새로 고침 입력의 유효성을 검사하고 적절한 출력을 생성합니다." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 보기를 나타냅니다." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "토큰이 유효하지 않습니다." diff --git a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo index 8b4ae3386ee1f1370a2ae12050b4a8039518c7e4..989bb5bef3c6f55b550497597767a8b6eea74ad8 100644 GIT binary patch delta 1157 zcmYk*Pe@cz6vy%3tIQd5O0&_-Kci_@mVdIev0NlZ1wvTTpG6xTfv?>XyAdnV8v`8c}utgMF-{TC`>T}O~_nmvsx%a&Yy$%h3UmVVm zG?6Lg;}_h3DFLb8k#=Dt@nDv;1LL!$Ww;l8Sc@yL4wEp1mhTLDZ~*-{gm)b2Ic_Gd z&ym()e~!Xh!eEpKY4{k|;3V$ES@bTFigKkf5|rmjXLTasR9eo z7HC21;2_%jF|>T|(KhrEE$=j1r^4SDkV`+%KFlkUIAHNBzZ%QYDm{o+ z(M62M%V{)JdCkcQYQoZum`PzOUT-~g|_e;G9ag}A%Drj zg{;9I*Xx;e<55!eF8o3!)vdRqvGQ6kS8#+3g+fKB*?=o{de}nnV YtdWX9VyZh7O#g3AZ7}!WobF)ZA2y(xdjJ3c delta 1147 zcmXxjOGs2<6u|Lwd+6NBNhkBwG>;s6IGW|u)KH00K|x_!EejIsX2uj23=!6)jV0x# z8xd4YQ=32+(iHR}+9VP*w2&4-v`Ac3;37*Zg#O2wS^duUxZmTP?|$eV>m8Y%Z?6%N zY(Qic&Y&LyL6KvI$TqZSr$ZuJ(6vHj5$;3}?#EI*g5{V%{r)n#FohNP2-AkhYiy)_ zG%T_b2g72^0)h-3K75ADa2&Vd6q@ry8tO#eut1DcUZwx{YWh)6Ux@?QjrXw_&HCK9 z7g<7lc#iK|aTD!KL}V>~i`XK22&x-I*h4z=_TzHeL%0#gkYva#>P`JzBaY3e^Lnrh zub>-mqYEEm4GyDba5O(|u=_6BB{qSkz5_jY9*eLa7vdmB(aAfCn$kb03zs%gCag!@ zz(UPn8g={?>Utkh5A+#z-AU9;**^$aOQumjtX(IP#1^#h3F^&!>zRy==)qys+P^>( z-{E2$$2RJ6?Vd&?cvjo%|>lSw>< z<*cp?+j;MzzUJpxg8#tIN3LbedC!I34c2MqlQhJG!)}>&$8E~Q diff --git a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po index 0e183aa4..10048f8c 100644 --- a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Saldo" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Bestel" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestellingen" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Persoonlijke info" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Rechten" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Belangrijke data" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Extra info" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Je kunt niet over je hoofd springen!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Geselecteerde threads sluiten" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Geselecteerde draden openen" @@ -134,7 +134,7 @@ msgstr "Een token verifiëren" msgid "Verify a token (refresh or access)." msgstr "Een token verifiëren (verversen of toegang)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "The token is valid" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -191,51 +191,51 @@ msgstr "Activeringslink is ongeldig of account is al geactiveerd" msgid "merge client-stored recently viewed products" msgstr "Laatst bekeken producten samenvoegen" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "De b64-gecodeerde uuid van de gebruiker die de nieuwe gebruiker naar ons " "heeft doorverwezen." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Het wachtwoord is te zwak" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Misvormde e-mail" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misvormd telefoonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Account is al geactiveerd..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" @@ -279,20 +279,20 @@ msgstr "" msgid "address set" msgstr "Adressen" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Voor anonieme chats is een geldig e-mailadres vereist." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Bericht moet 1..1028 tekens bevatten." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "We zijn al op zoek naar de operator om je antwoord te geven, wacht even!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "De toegewezen gebruiker moet een personeelsgebruiker zijn." @@ -556,13 +556,13 @@ msgstr "Vriendelijke groeten,
het %(project_name)s team" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Account activeren" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Account activeren" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Wachtwoord opnieuw instellen" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Wachtwoord opnieuw instellen" #: engine/vibes_auth/validators.py:13 msgid "" @@ -587,7 +587,7 @@ msgstr "" "verstrekte referenties. Het is gebouwd bovenop een basis token view en zorgt" " voor een goede rate limiting om te beschermen tegen brute force aanvallen." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -602,7 +602,7 @@ msgstr "" "op de bijbehorende serializer om inputs voor het verversen van tokens te " "valideren en de juiste output te produceren." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -610,7 +610,7 @@ msgstr "" "Vertegenwoordigt een weergave voor het verifiëren van JSON Web Tokens (JWT) " "met behulp van specifieke serialisatie- en validatielogica." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Het token is ongeldig" diff --git a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo index c0ffa3cdae2c3cee513c4f1cb8d3beef7f6075f0..59a4ffa438da5044f7f759a5d50bb6aeb30e0223 100644 GIT binary patch delta 1157 zcmYk)O>E0?7{Kx8pHXeMuC*6Mb^TMiSs9yIdk`H78w+7b76;}n<|RF>HHnU9M@>EgJj+3_x$pEdH&Du8A*;MZ~rLD z21Vp~l}Igq#TxX7L=GDw&DcqN-4t1hj>RG+7{yYIqZ?c7`F5-%-j5DEh2_|bIYZOFz5$THjh$x$Y-6U)e6FHYH> zLGF}3Jk9=VxSTjZ7AtX6EvIeJ4NPby?jU!`3)F)ru^#g<^@|Q-0((&R-9;b1 zL_dB)Cr)Dk9V0B(S!GGM^L|X z9El#22J!+e=o){j;*LA?86ew zqgJHfb`Z5$A0e+NA5kmpZ7B3uJ?hi8VzG8p7X$6uH0qb-kY|%is3jgoZJIZ@8;i(R z*LR@4Z4$Kya;WQXVh=vVec0GoNYKK$#5b@R?_oLj%apyqv$oJ|CThm*sBf1>tw;v7 zxh~ocVkPk~F2c8{6`VwU+Xx-z!#d1k0`-ZWqE_HF2CEtTWS|?(n23Q9emnS`vs}*a zhFH_iLq@N4!1c{IYwdKm88URm-B4kLLP1w1btIiWmOPrW#;d~4zrjqEIkYa+@3(4V Pq5syrYcl_>F=CNFn=O`F delta 1147 zcmXxjPe{{Y7{Kx8XJ-57w5F{;x~*1Qt}L_VBBL~|Ly{$oE`b=%kTHT&-=X3=2Dr|yS>-Mc+n|6}S)eMBTUtPoci|04wng z`tch&@Gq{$l1)?%1L(s2*o0js1I=(8%keJi2_EATe1;8}!Oi#wmtmCjt8gcF;34EA z*X{XNSV8;+b-j7i^>TK+V8>=DtLnlYezf$>cm|K)0KP-7&TkPJ!~a@HYTnjd&z6mQs*&*KI&hAaomCJs3lCJ2ggw> za>aHEwOOAcwiCZ53>{D@k?Eb3jarNb&Qh7;I~dPOf$|9\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balanse" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Bestilling" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestillinger" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Personlig informasjon" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Tillatelser" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Viktige datoer" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Ytterligere informasjon" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Du kan ikke hoppe over hodet!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Lukk utvalgte tråder" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Åpne utvalgte tråder" @@ -134,7 +134,7 @@ msgstr "Bekreft et token" msgid "Verify a token (refresh or access)." msgstr "Bekreft et token (oppdatering eller tilgang)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Tokenet er gyldig" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "Bekreft tilbakestilling av en brukers passord" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -191,49 +191,49 @@ msgstr "Aktiveringslenken er ugyldig eller kontoen er allerede aktivert" msgid "merge client-stored recently viewed products" msgstr "Slå sammen nylig viste produkter lagret hos kunden" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brukerens b64-kodede uuid som henviste den nye brukeren til oss." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Passordet er for svakt" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Feilaktig e-post" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Feilaktig telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldig attributtformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslenken er ugyldig!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Kontoen er allerede aktivert..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Noe gikk galt: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" @@ -276,19 +276,19 @@ msgstr "" msgid "address set" msgstr "Adresser" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Gyldig e-post kreves for anonyme chatter." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Meldingen må bestå av 1..1028 tegn." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Vi leter etter operatøren som kan svare deg allerede, vent litt!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Mottaker må være en ansatt bruker." @@ -552,13 +552,13 @@ msgstr "Med vennlig hilsen,
teamet %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Aktiver konto" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Aktiver konto" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Tilbakestill passord" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Tilbakestill passord" #: engine/vibes_auth/validators.py:13 msgid "" @@ -583,7 +583,7 @@ msgstr "" "av en grunnleggende token-visning og sørger for riktig hastighetsbegrensning" " for å beskytte mot brute force-angrep." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -598,7 +598,7 @@ msgstr "" "tilknyttede serialisatoren for å validere tokenoppdateringsinnganger og " "produsere passende utganger." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -606,7 +606,7 @@ msgstr "" "Representerer en visning for verifisering av JSON Web Tokens (JWT) ved hjelp" " av spesifikk serialiserings- og valideringslogikk." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Tokenet er ugyldig" diff --git a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo index d059c12eaf90ab72cdb903e54f7c7eeb5f0ee4ba..b0698772542374bf60c49e911e7a7af115281863 100644 GIT binary patch delta 1185 zcmYk*OGs2<6u|Lw(`p>Wx8|5S*CronWoZw!0<*`2ZIlQy3N#&J1{%Q`3mm5lMS&4n z-9-^;s}gKc;-W6!iXRcDr`|?(f>4;3Y6bD-{rgaob!G2rT2U9-LFYj zv534Z5vjsCti)wrk#0kz38UmUO_9}DSSpf-e$2wdn1(%$16V{ph;F=v1vrjR4UtJ) zPkzxSvJM~n#FC{1^DJl~Kad*4vr?oP>#=l^NDS}sg5h$Je%AL>r3gA ziR7;l$;C?4Lbl;@+=<$82fFYQ?#62t!3u&|%*5oiiH&)vBP>E4Sp{k#?WiNYfO=%3 z*o3c;Kgppjon$lWQFWjeavT?9-0`%dHAtWvhp-SI;vi0A2X;}mj`9ii;uLC!JE%%K zK7eT$!fZT&t#}T#(>Ium?@=55i1aFHwSSJll12g@MJTZ#>rhGEucAI;zArr&y+FaY~El!C=0?}wNd^BReF7dhkCcjF|iLKrj pp0aS~u|V7m2Lom>5`|Ep(Tw%=1-s*=@^5c?gZcm7e7mK={To2^qeTD! delta 1151 zcmXxkT}YE*6u|MbK6Gx<+}cbnx7TLtW2tFnjlNcciXuwTi(>SFu_(d83fK2YFeL#O0bI%0xzV9=tjF4yVEYhh#=@97?GhtQvc)L!QgkE=jDB#bI$X;`;+>adNsW; zvqnU6evuH)U@iIsBByO4+wlV9XNJgntgI99VGP}P6w9&8@*=Ka+=mW)j#W5}V>Xd- zY-W5nD6#?H1tlY;1bHTO;~69e@zsm$!A)4VKqQT$Eby2tFEigp)^^O|TAaWn{=*VX zGU>z~WJ-Fmm-k=dKE{nroSl;Bt(jRvbq=-ow54Fhj7CUql%*@lETG!$ud*4k3e7S#~OTtw{Zeb;tA4r;(JVC7PZ1%WTh3iV>u?! zgXi%G-bAhRBQC-(sD*w*Y889S{1IfNl|WmOC``yO>K&LuP3$i&!|+Ct0~kY1=)UCu zRxlny7mgyQAs^7dXwL!=_Lta}!bZo@V4Svmgj(rq>-iY!LZ4AL znngV_?^Y4MRB1x)tsF)@k}K%JTNuYDs0GfVUfR+KcO^v7K%lp~9r;S;{|odC#VoV` zvRyOh?47pj=Bcv0P0TjOLEF`lr;ZkHNoTS\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Równowaga" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Zamówienie" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Zamówienia" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Informacje osobiste" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Uprawnienia" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Ważne daty" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Dodatkowe informacje" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Nie możesz skakać na główkę!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Zamykanie wybranych wątków" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Otwieranie wybranych wątków" @@ -135,7 +135,7 @@ msgstr "Weryfikacja tokena" msgid "Verify a token (refresh or access)." msgstr "Weryfikacja tokena (odświeżenie lub dostęp)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Token jest ważny" @@ -174,7 +174,7 @@ msgid "confirm a user's password reset" msgstr "Potwierdzenie zresetowania hasła użytkownika" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -192,51 +192,51 @@ msgstr "Link aktywacyjny jest nieprawidłowy lub konto zostało już aktywowane. msgid "merge client-stored recently viewed products" msgstr "Scalanie ostatnio oglądanych produktów przechowywanych przez klienta" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Zakodowany w b64 identyfikator uuid użytkownika, który polecił nam nowego " "użytkownika." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Hasło jest zbyt słabe" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Zniekształcona wiadomość e-mail" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Zniekształcony numer telefonu: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Konto zostało już aktywowane..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" @@ -280,19 +280,19 @@ msgstr "" msgid "address set" msgstr "Adresy" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "W przypadku czatów anonimowych wymagany jest prawidłowy adres e-mail." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Wiadomość musi zawierać od 1 do 1028 znaków." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Szukamy operatora, który już ci odpowie, zaczekaj!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Odbiorca musi być użytkownikiem personelu." @@ -556,13 +556,13 @@ msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Aktywuj konto" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Aktywuj konto" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Resetuj hasło" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Resetuj hasło" #: engine/vibes_auth/validators.py:13 msgid "" @@ -587,7 +587,7 @@ msgstr "" "oparciu o podstawowy widok tokenu i zapewnia odpowiednie ograniczenie " "szybkości w celu ochrony przed atakami typu brute force." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -602,7 +602,7 @@ msgstr "" "powiązanym serializerze w celu sprawdzenia poprawności danych wejściowych " "odświeżania tokena i wygenerowania odpowiednich danych wyjściowych." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -610,7 +610,7 @@ msgstr "" "Reprezentuje widok do weryfikacji tokenów sieciowych JSON (JWT) przy użyciu " "określonej logiki serializacji i walidacji." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Token jest nieprawidłowy" diff --git a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo index d3401cbfd63c847e4dcaf953f789eb0e4c7943ca..0027821a855d9114b126cab607db7bade1774fab 100644 GIT binary patch delta 1180 zcmYMzO-NKx6u|NGtaL`n{1~;VoR6H!vec|>vJ7R4z)%ufs8paidS!h;yc zjc5=p7k#)E{g{r8xB*X~X7Cc)aSUs5(xk!WWDzsb$y2(sV$8rYWDeP%v=bflZ=)W? zIM(4S+=&@wiKD4TUC?pVc%8T!Be)7<$#HXlhMvVu)FXI|QJlqQ46yxdyo*=y0j|Mv zX48N*s0(etOl-vl459AyDe6(gF&k%4GdqV&VajhB0S1aINE@C<>QF|p8sDH6Tgonx zL+C`^(J9m-3!(<@LOmK22`NLk1>;Cr$q&>xnY$B5ya_XyUutRSAN81v9jHaphq}^- zr~%($J^n$>K;53i^R1{y7)Fg_VGEAqIb2CF2SzXlui;_5gL%v^bIAu5kd%mRZz7-{ zHFYO3AI~6Pq{NbrpcdB))E$07E?MHHsjnoRI$;fVViRhHo}(7|do0w?=Q|C)49VI@ zC8LfV<9Eff+ZGJ5{@P9(m#sGYPa|eErXMwAY9zhFVY%If_Wtf*PfsX(w%hvXDzg3W xEV(>W2i&)uzHnPtFy;xrz8CQX`$FA4!75LGZ*Qn0=9T4FXZ`NwSAY4v{{ZhdpHct- delta 1173 zcmXxjT}TvB6u|K_T7Il#e(jd!u4B7ov1VmkYG@{AkfCc~qCHrfR(^!RvK68>h1HWJ zF$ne0gAfWuAzINF5(Gt5zC?l0OE1w=1{p=5^gqo8!~E{OGjr}a_uhFDor+E_Bw8Cp zWY#CL9)F=1efc6ChDZhW(jPNLiZP==#En(x!9$pZr{d!l>i46VjMKOZpW>t;@*cO) zzvLGQ;sd`}l0@S(1G)GW*I+_GWCwb&I6a4i-VIf>MuX55Ba*$8IfUEGB;xDFRF z8%?6F#t^!&9`mpTbp_90D&E3syl2s%IQfq0=;kf0EP!bkL}E*6+z!m4e+_jj#<32c z;Z{uE>}*XrYC?^u@j7q?_TX~ti;r6t4T_d4s9P|FQGAOnSVj4ncpWd|ZCr^(%%%Y= zP!p}gbZo{3JdRrFeblX(!AyLGy2W$I6qYQ|s9_*bB2tE($T^fTtipnIEB z(P7j>7C{Z%g}OEUNJtsRLYzU4m3%>s;|e)jT!3lJFO@X(!9L8!qo{`@hMMUe)POIs z9)F{*z~1f7`^~6Z*o_)z1Y2<&yHSJXKo4f&1*}CI-OMj@@fYTiC6Q&NPQVcA(zT)o zk0F1g^u@h_dbl2=R`?OQo0y*vME tZqRvL+;}itS6kC`q@lXLcF-I!t7BbfBT*zd~n{sKKFnppq< diff --git a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index 4518db5d..274445b2 100644 --- a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Equilíbrio" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Pedido" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Pedidos" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Informações pessoais" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissões" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Datas importantes" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Informações adicionais" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Você não pode pular sobre sua cabeça!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Fechar as linhas selecionadas" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Abrir linhas selecionadas" @@ -134,7 +134,7 @@ msgstr "Verificar um token" msgid "Verify a token (refresh or access)." msgstr "Verificar um token (atualização ou acesso)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "O token é válido" @@ -172,7 +172,7 @@ msgid "confirm a user's password reset" msgstr "Confirmar a redefinição de senha de um usuário" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -190,49 +190,49 @@ msgstr "O link de ativação é inválido ou a conta já está ativada" msgid "merge client-stored recently viewed products" msgstr "Mesclar produtos recentemente visualizados armazenados pelo cliente" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "O uuid codificado em b64 do usuário que nos indicou o novo usuário." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "A senha é muito fraca" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "E-mail malformado" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de telefone malformado: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "A conta já foi ativada..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "O token é inválido!" @@ -275,19 +275,19 @@ msgstr "" msgid "address set" msgstr "Endereços" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "É necessário um e-mail válido para chats anônimos." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "A mensagem deve ter de 1 a 1028 caracteres." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Estamos procurando o operador para lhe responder, aguarde!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "O responsável deve ser um usuário da equipe." @@ -552,13 +552,13 @@ msgstr "Atenciosamente,
a equipe %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Ativar conta" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Ativar conta" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Redefinir senha" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Redefinir senha" #: engine/vibes_auth/validators.py:13 msgid "" @@ -584,7 +584,7 @@ msgstr "" "garante a limitação de taxa adequada para proteger contra ataques de força " "bruta." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -599,7 +599,7 @@ msgstr "" "exibição depende do serializador associado para validar as entradas de " "atualização de token e produzir saídas apropriadas." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -607,7 +607,7 @@ msgstr "" "Representa uma visualização para verificação de JSON Web Tokens (JWT) usando" " lógica específica de serialização e validação." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "O token é inválido" diff --git a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo index b65780e18311c71a9835172ca38f0c447ddb7ec8..c6fe89141b08d1c611989a149d4196363a59a306 100644 GIT binary patch delta 1189 zcmYk*T}YE*6u|NGs^s>T_Tg7%x>sj@VP#fUGcD;(p)^VaQ7~O5q?y}FT60KHmJrl? zlad5Q5CxU&Itr3*gebwlFbL}|(TkQ)AoM?NRIu%Lp7-N9=RD7|rNBzyc{DMcD zW6ruI{O7@h!q|%@=I}rn`GC|}H3N96qgm9TE9eBP}ggNCB4&q(Z>lt)oVjk|m zQhZDSEx3wZjars!3@Ujco6;Z>yx;V@eFRp zueb(RaSJ9Os8Fbsq3yJjif7Tp zAnIATipTIa>WVC&CXC_+{E1qiNmndxSPBWWfF{&E8AUDR73$V}j*ng3tY>@(bqQ~v zc4lK5j-w`cihSfHKb&WYVgaV@jUC1+)RjAmCi$hCAcG47s1=W39gbrW&Z7qttJpWJ zMNM=o?tRqfBB*=)5r^;x_M)E?r~iTl+=RbS8%f#EN|0Y#2r_X1btSH2F}_A!+Ha^6 zte~FuR36%f6_}09Sc3h?+%kr`74K2!{e;69MQ!i`-DsgBn5&5%5R~CG8mQeg@*T3B zj_-!ptBy|NvfbfaHbQoj*Pgf{k{>?G!vHqW<;5Y6grd$93 delta 1175 zcmXxkT}YEr7{Kx8%~;#=BU4wp+}>K6m3>)hF74wgGWwE*Bvjb66x_0prC@VdmJn1I zZ%SQQ1VLbhfmcybM9@tQDvScL?h1pl4~;I${!g1Q_j}HH-*e9MoO9+x5e(c=}VH$*BhO8bT>vIf2LMba>U>39%l;!#Y+D9*$4I0J9t92~%5L*yA2 z)4u6T_|hk_|1bWfLkHRxin!5-0o;gtriole!BMj8B>YU)b_^{RVNN-TZFmK>KXZwQ z6Z3F67GOUK1h9gq#PfXA`ARVxD{(qjqaIPLhM=6_0CL=N6|ducY{b2*L^ALRcH=A5L~AK0 z9UIY!t*Ce5H15QUs5>%(y5Jbj!g16DZB)hP#>6Dh1h%7IvToEw9-@VHNH5 zs9SgrwX#c?g}tZ?^dld6z!&#f#&7{kRXSSFlxqKxEXt~5Z|I7 zC$Sp+rHO?uB)x|E-T>-Zzrhath9PX>#_6wM1ZU#}Y9Wqw>;&sefWU=e)SWnsi|`TZ z)_z2t;5+JVck)sJ7Go|}V-YqZb4w5EQM^E%_Z@cP7;1sXs7A+kVZILRC(z7aqk&q@ zF8;)F*nb#N>yJHXbXawcuZCE=o!g94gMH4DY+LY1_)ybfYuw|T3QezR#XX+EP2R2U rslGdYb1F2wE^E}E>TVC$g&Lw}IAS)mH61_k^o-wZk3^d4`Ty|`JzJpj diff --git a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index 9645b070..8826e695 100644 --- a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Echilibru" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Comandă" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Ordine" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Informații personale" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permisiuni" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Date importante" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Informații suplimentare" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Nu poți sări peste capul tău!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Închideți firele selectate" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Deschideți firele selectate" @@ -137,7 +137,7 @@ msgstr "Verificarea unui jeton" msgid "Verify a token (refresh or access)." msgstr "Verificarea unui jeton (reîmprospătare sau acces)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Jetonul este valid" @@ -176,7 +176,7 @@ msgid "confirm a user's password reset" msgstr "Confirmați resetarea parolei unui utilizator" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -194,50 +194,50 @@ msgstr "Linkul de activare este invalid sau contul este deja activat" msgid "merge client-stored recently viewed products" msgstr "Fuzionați produsele recent vizualizate stocate de client" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Uuid codificat b64 al utilizatorului care ne-a recomandat noul utilizator." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Parola este prea slabă" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "E-mail malformat" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Număr de telefon malformat: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Contul a fost deja activat..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" @@ -281,19 +281,19 @@ msgstr "" msgid "address set" msgstr "Adrese" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Pentru chat-urile anonime este necesar un e-mail valid." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Mesajul trebuie să aibă 1..1028 caractere." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Căutăm operatorul care să vă răspundă deja, așteptați!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Destinatarul trebuie să fie un utilizator personal." @@ -559,13 +559,13 @@ msgstr "Cele mai bune salutări,
echipa %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Activare cont" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Activare cont" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Resetați parola" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Resetați parola" #: engine/vibes_auth/validators.py:13 msgid "" @@ -591,7 +591,7 @@ msgstr "" "de bază a jetoanelor și asigură limitarea corespunzătoare a ratei pentru a " "proteja împotriva atacurilor prin forță brută." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -607,7 +607,7 @@ msgstr "" "intrările de reîmprospătare a jetoanelor și pentru a produce ieșirile " "corespunzătoare." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -615,7 +615,7 @@ msgstr "" "Reprezintă o vizualizare pentru verificarea JSON Web Tokens (JWT) utilizând " "o serializare specifică și o logică de validare." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Jetonul nu este valabil" diff --git a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo index a2dfbdde9068286a641ed67e4f52aa2c03d61cf6..93e7dee817295e2491e6b3ca311b0f28cb5ba581 100644 GIT binary patch delta 1159 zcmYk*TS!z<6vpxIj9Mxs8s5NkyiQJn=B?B;Ez_xnE_OvMnyF0mp$LV_(jf~8vY-YL zxa^)U0>YtKG=pS9MWs{_{1fOYd*SRhr> z%QR^rPGc@6Ii)?8RD+Ym*V3ge*p(r%M6W}B#W>=)Oxr9p`;=lV`q1omz!)Z-$JNA7 za-_95*QJ1B7&N);2itHtaX;?DNpyru6$_*YHmJ&z-Z5XBZy%6dAbE*PaSV^4+0U~` zO2(~d4&0AZ4(T5D5C@Cx`NWcd)X0RdL@L7jSc{*Ky;N9gAK*t1@i20>zT-j6UM#J| zi%3#>kA*mUi8Kexk)&0R+pra5aTL38JiwrwK|`4|A5Woq@OsEQxQY02$V3)X47H&t z?KwP-573mfxr6W?>Ib;2`#5XQh;YRu$F3 zBuv3^oQI#$l-ycoXBLY-;tVwNJt5DcsnBIi#%EY3`u~=}2_|x??N$t74RJVMO<0HK zQe8nmzQAbA=c4>6F>+5;j~TcZO{-2KUDPWyt&Lb=SF8-PiTxPQ`RZk09=w1ivxnG- zQ)o(D%!SyD+p!;SVG??1d@AllrqqRQ9L4AO5ltoUlBQ`zU%ixtx3Lf3U@qsYnb$Qv zJA*zPL)scE}3+r3o(>E zBv?dX5Li-CU|A4E#P(1U5m9el9+If&A*{ZqSs!LU|NohpbLRa2XRi-hR|c)oAF<&a zNfD2fjla;19y}HOPvLL1yX>#5T9Tln)zy% zN$J>xX2Cu9CPuoA{p4qtJL4(EVX1|IwqmIW?_e!{M&{Cz5@&%R){&1OYwH^xKwqh} z7B3>3(mO1~*cDPDmLQu}4L0LWOu}&tVI)jYM$ouYT8PKcym&S0P258MAZiK^Qw(*Z zDeW0Nf_KrBw0srS!V_qon?SmxPZ)=;a%cYJs9_I56F2hFJQ%`B9LA&AQz6aAX}pi~ zR!a*of+_d~P06Rx>@0DO)Q)a6=v z*%-nOe2Om2$ diff --git a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index 5b5dba8d..cf479831 100644 --- a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Баланс" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Заказ" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Заказы" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Личная информация" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Разрешения" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Важные даты" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Дополнительная информация" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Нельзя прыгать выше головы!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Закрыть выбранные нити" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Открыть выбранные нити" @@ -134,7 +134,7 @@ msgstr "Проверка токена" msgid "Verify a token (refresh or access)." msgstr "Проверка токена (обновление или доступ)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Токен действителен" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "Подтверждение сброса пароля пользователя" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -192,51 +192,51 @@ msgid "merge client-stored recently viewed products" msgstr "" "Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "b64-кодированный uuid пользователя, который направил к нам нового " "пользователя." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Пароль слишком слабый" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Некорректное письмо" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Некорректный номер телефона: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Аккаунт уже активирован..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Токен недействителен!" @@ -279,19 +279,19 @@ msgstr "" msgid "address set" msgstr "Адреса" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Для анонимных чатов требуется действительный адрес электронной почты." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Сообщение должно содержать 1...1028 символов." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Мы ищем оператора, чтобы ответить вам, держитесь!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Получатель должен быть штатным пользователем." @@ -554,13 +554,13 @@ msgstr "С наилучшими пожеланиями,
команда %(pro #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Активировать учетную запись" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Активировать учетную запись" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Сброс пароля" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Сброс пароля" #: engine/vibes_auth/validators.py:13 msgid "" @@ -585,7 +585,7 @@ msgstr "" " построено поверх базового представления токенов и обеспечивает надлежащее " "ограничение скорости для защиты от атак грубой силы." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -600,7 +600,7 @@ msgstr "" " полагается на ассоциированный сериализатор для проверки входных данных " "обновления маркера и создания соответствующих выходных данных." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -608,7 +608,7 @@ msgstr "" "Представляет собой представление для проверки JSON Web Tokens (JWT) с " "использованием специальной логики сериализации и валидации." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Токен недействителен" diff --git a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo index cc5c231eeadaf9e60abd77857ccc4667376f2340..f1f7f4acf4e8a2fee06b2353131f4a95d468f5ae 100644 GIT binary patch delta 1157 zcmYk*T}YEr7{Kvo+Q+-4Ic=#m_T^-zwk*@OYLx9lf(B&<5>a3?#EUj*(uZ233xk4% z@?PXkSA9wZf_>ejS4rLo79w6mHyJ`j7e#kv|EIlF7u)ZgXXiZUoada)_rB{L|6Z8& zh{&v0qz*sh7Oe1zblF5&Fh&2KUnGpKfJh0((TPXVj!7)Wv*^MBT#Lh2e-y`UB9Bqm zITg(3yB?IRtRe86fKHsm3Ve$V_z4RNMBLRPH%Qog=ya!MdpT55UAx#J;9e7bI3Kz80tyqFosK5gjL*& zZlD1*@jlcOw;_q88!3v6SWclX`~|h*#!fvL_g_y#C+_|e5IKxm>XWFY%pr5+E_UI9 z6_0U&ny?*t*pfmWKa7{~0qXbw_fm@2(21j{6&k}b)|VgF0Q;`|Rk%@im_U8SX)MQn z+=L^j3qL}=vT4*u_#R0mE2#6DBl*g-;1KC@O6f_^{Ak ze!fOUt>|sFUec!|Ujo;I>?wkbB6HG{y{f-ydr}(ktn8^KlF+0Kv$E5hr94AR#Xt%B65cWjZ}G^cs3|vppWXQSz0iGJ*fF!paWka zXOK5|m-U~qo%sk=sE=FIB8M0h3HWexTgiQ>iO*msj-hrYhwHI``|%U%2LA1(j&!3Q zU;qtFqUO1b+CkHbzs5bx-=-P(8T>_TIw zNFBy-10F}smqab-5?103)GJEgVxSvjumPuW6c;d#{p{+*mpFp6);z?bwagEqzJURB z;b}aKDJwpMy3rig;5;_sM{Hq#Sz^#ZU@JfB34S(V2DxU*qMmdfqqvA`(8IlG0d1&> z_oANo2$ERhNK<6eat3wdZ>Sw#xmyp${RbK7!mj0jNH1!uPolOmgRGGUIEV{YJi-NP z!an3-%SF`hC-53RLjB&&y;S3Ebm0_ghq741{_?~6pfXgtih9%vdr)6-66^2^Zp2B{ zjh~`k*(~ZKe2=7(CDe5t;ZkR!IL^EeS7Q;IaS`3xA|q0Ir6J_MWciQ%D5l-`X&W>D z8gbiA^PK&=P0VACUfXE?o};t2Dn67tpSWQD_5{j9pVwy=Jf8dk?~{gd%o%Aa4?~fl I`6cZA4?l~KZ~y=R diff --git a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po index 4b056951..486bc31e 100644 --- a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balans" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Beställning" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Beställningar" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Personlig information" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Behörigheter" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Viktiga datum" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Ytterligare information" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Du kan inte hoppa över huvudet!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Stäng valda trådar" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Öppna valda trådar" @@ -134,7 +134,7 @@ msgstr "Verifiera en token" msgid "Verify a token (refresh or access)." msgstr "Verifiera en token (uppdatering eller åtkomst)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Token är giltig" @@ -173,7 +173,7 @@ msgid "confirm a user's password reset" msgstr "Bekräfta återställning av en användares lösenord" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -191,50 +191,50 @@ msgstr "Aktiveringslänken är ogiltig eller kontot är redan aktiverat" msgid "merge client-stored recently viewed products" msgstr "Sammanfoga klientlagrade nyligen visade produkter" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Den användares b64-kodade uuid som hänvisade den nya användaren till oss." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Lösenordet är för svagt" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Missvisande e-post" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missbildat telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ogiltigt attributformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslänken är ogiltig!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Kontot har redan aktiverats..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Något gick fel: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token är ogiltig!" @@ -277,19 +277,19 @@ msgstr "" msgid "address set" msgstr "Adresser" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Giltig e-postadress krävs för anonyma chattar." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Meddelandet måste innehålla 1..1028 tecken." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Vi söker efter en operatör som kan svara dig redan nu, så håll ut!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Mottagaren måste vara en personalanvändare." @@ -552,13 +552,13 @@ msgstr "Bästa hälsningar,
teamet %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Aktivera konto" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Aktivera konto" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Återställ lösenord" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Återställ lösenord" #: engine/vibes_auth/validators.py:13 msgid "" @@ -583,7 +583,7 @@ msgstr "" "säkerställer korrekt hastighetsbegränsning för att skydda mot brute force-" "attacker." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -598,7 +598,7 @@ msgstr "" "på den associerade serialiseraren för att validera inmatningar för " "tokenuppdatering och producera lämpliga utmatningar." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -606,7 +606,7 @@ msgstr "" "Representerar en vy för verifiering av JSON Web Tokens (JWT) med hjälp av " "specifik serialiserings- och valideringslogik." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Token är ogiltig" diff --git a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo index cf24e59ddaf81da453f49f1b197382337669c4e8..8dc4f1f48e169a365fcfb34c95a68d202ad12ba6 100644 GIT binary patch delta 1159 zcmYk)Urfzm9LMp`k>;FcYr?eI=|mE3H9~(#rK9wRNYthp>ED_~tEMS+%ne4S{hBSr zYMHobSzK}9!bN3cUD%S%#@3b4Vv9}Y{rLTci?i4BeSXjRKHum2JWq#Q&xc&Y-+}^O zNiQR$Se(HPxXLG0xugut!Ml-?#r)?r5=(S`t!*DNrDu*Ga0~I`D9MA#Sb&-MK1k}q zD&nRXsT?O`6wp!ziR_w)eyqe+JcsWvE?7FcQF=>)&Und7L3IhzO1@uUweRq>;mR7oH#nu&XKHh|z?`@ZDNfV)2BZAa8C*bf$1S_L zS6bhLn}}~yg*ovnG#&C}+a}=^;%YPNvS=2G~CCFCPzz%mpJshpsK425Va zFf)47q9ieB<5De(T!~OY;Ia~1sFaJM@Adz8^*QI>|D1d7gBcmHh6k+Ib5Y?@ zm1u33TKRnyJ|-XAWj7GY3QJEJc$XzLVRN<=!U?R#yc`<9yXeOe$LL(?4S69R!3Cs* zDt6o7ccE$UEwWjC!U)deI_%1mF5t5;L4d$V^;E3GRoLU$kEW4Vj;?^Tm%PUD3BDlz zj;HWezTLnqt|j*s*!8l}oJ^UMS38EA2+WSpBh6_FKci=l)PW1=!?r>x+LG?zR`Ppv zVRrlx%?Y`RY%{Q%ycW#~%%Is&bg@03faa1@l6g$ah zoxF9weY6j;mvM`#so006;24?(qbj6rcocu)4SbL72kjH{^AgQTox?tSfN89+>_c{; z5H^xOM{`6gtLz;XqWNJpnw?&A97S^lE><^h!jG+H9^>&3nvE^zg|6o6GSD;6nZ`0$hg}*6!4VpTpAk;2A0BwV0q+v(EA_fO08}H diff --git a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po index 195bd503..10ea7931 100644 --- a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "สมดุล" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "คำสั่ง" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "คำสั่ง" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "ข้อมูลส่วนตัว" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "สิทธิ์การใช้งาน" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "วันที่สำคัญ" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "ข้อมูลเพิ่มเติม" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "คุณไม่สามารถกระโดดข้ามหัวตัวเองได้!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "ปิดกระทู้ที่เลือก" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "เปิดกระทู้ที่เลือก" @@ -134,7 +134,7 @@ msgstr "ตรวจสอบโทเค็น" msgid "Verify a token (refresh or access)." msgstr "ตรวจสอบโทเค็น (รีเฟรชหรือเข้าถึง)" -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "โทเค็นนี้ใช้ได้" @@ -171,7 +171,7 @@ msgid "confirm a user's password reset" msgstr "ยืนยันการรีเซ็ตรหัสผ่านของผู้ใช้" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -189,49 +189,49 @@ msgstr "ลิงก์การเปิดใช้งานไม่ถูก msgid "merge client-stored recently viewed products" msgstr "รวมสินค้าที่ลูกค้าดูล่าสุดซึ่งเก็บไว้ในระบบของลูกค้า" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "ผู้ใช้ที่เข้ารหัส uuid ด้วย b64 ซึ่งแนะนำผู้ใช้ใหม่ให้เรามา" -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "รหัสผ่านอ่อนแอเกินไป" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "อีเมลไม่ถูกต้อง" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "รูปแบบแอตทริบิวต์ไม่ถูกต้อง: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้อง!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "บัญชีได้รับการเปิดใช้งานแล้ว..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "เกิดข้อผิดพลาด: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" @@ -274,19 +274,19 @@ msgstr "" msgid "address set" msgstr "ที่อยู่" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "จำเป็นต้องมีอีเมลที่ถูกต้องสำหรับการแชทแบบไม่ระบุตัวตน" -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "ข้อความต้องมีความยาว 1..1028 ตัวอักษร" -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "เรากำลังค้นหาผู้ดำเนินการเพื่อตอบคุณอยู่ กรุณารอสักครู่!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "ผู้รับมอบหมายต้องเป็นผู้ใช้ที่เป็นพนักงานเท่านั้น" @@ -545,13 +545,13 @@ msgstr "ขอแสดงความนับถือ
ทีมงาน % #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | เปิดใช้งานบัญชี" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | เปิดใช้งานบัญชี" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | ตั้งค่ารหัสผ่านใหม่" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | ตั้งค่ารหัสผ่านใหม่" #: engine/vibes_auth/validators.py:13 msgid "" @@ -576,7 +576,7 @@ msgstr "" "มุมมองนี้สร้างขึ้นบนมุมมองโทเค็นพื้นฐานและรับประกันการจำกัดอัตราที่เหมาะสมเพื่อป้องกันการโจมตีแบบ" " brute force" -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -591,7 +591,7 @@ msgstr "" " " "หน้าจอนี้พึ่งพาตัวจัดลำดับที่เกี่ยวข้องเพื่อตรวจสอบความถูกต้องของข้อมูลการรีเฟรชโทเค็นและสร้างผลลัพธ์ที่เหมาะสม" -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -599,7 +599,7 @@ msgstr "" "แสดงมุมมองสำหรับการตรวจสอบโทเค็นเว็บ JSON (JWT) " "โดยใช้การแปลงลำดับและการตรวจสอบความถูกต้องตามตรรกะเฉพาะ" -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "โทเค็นไม่ถูกต้อง" diff --git a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo index 0a2d678e815068b6f4ce38948576e22c7dbb1c88..c955ff879ca53c87a913b7578f7056a19d357375 100644 GIT binary patch delta 1157 zcmYk*TS(MF6vy%3rq%9R;w>%BU2`Qfvx{A9OJgCTG!TO*2sCdI5{0%3q1h7lu!R!( zH>ij3K_ZAC(Tt!T6zZXuq97s=dPoRLROs^1jlRcSDp>Y2XZX*YnKLsl!f(POUlJm@ zlAimd^*Dp;Fv~AByQC1FBfga8w>u|_`~euq}l#Er2XWa47tTx4zq;?^KlR5#kVA>4;g z&=Pp5uPr=;HeWs3QJh5&c48u4iuXq@(+JVgkG8W{cm?OM1v@v#&UP9*h`(Ywp4uWU z!wA|!d*kr{Rud1QC7wk~_zkVHKak?eS1MI7TvaqebVM3RIbN05UO!{5nn}2V2n+^`c#>3A7zf zqwQoKtrFgyu|!2^{rl1GL<4dS)Pu=5iuN2Qu??r<{neD&7FuiCfG!$#$?hPpWZ}uw z;04Fy{_K+T%iZKU?=*PkT;0wg??IQwZhA{I9KS!;(-l6^-rjQNWY~G_3%LIVzkPXQ W<$hnbGaCH=oBCkkzi;}21%CiB-I?tG delta 1147 zcmXxjUr1AN6u|LwtF3K@6BxvMI3I_x2%qCqL*x~% z*XJT4{NzbQEO8TzGg^Z0ku}I~+=+owk!^EC8gYyX?y$<+hA5#mL+eay)=^Q7)psH-L5c z0=0mf{_4VGsPi2|J&F$WVmHpit4`j!PEboCiMq24-onq=hTR*oXFGxC8Gpq>Y~4t^ z@e=And!2C~9%MX#T6hYz;5XFH&LGW|V3o)Y;r#ay)RIVG6klQh|6w@>I552vyKo=I zQCmEOd6+_deiZexy+M95#a}U+o3b6NK|kXoxER~fLw!jQ6p%Pk0SoOcKYNScsFj2>;+-^lzoJ)R&_KOYsb9p\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Denge" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Sipariş" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Siparişler" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Kişisel Bilgiler" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "İzinler" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Önemli tarihler" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Ek Bilgi" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Başının üzerinden atlayamazsın!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Seçili konuları kapatın" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Seçili konuları açın" @@ -134,7 +134,7 @@ msgstr "Bir belirteci doğrulayın" msgid "Verify a token (refresh or access)." msgstr "Bir belirteci doğrulayın (yenileme veya erişim)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Belirteç geçerlidir" @@ -172,7 +172,7 @@ msgid "confirm a user's password reset" msgstr "Bir kullanıcının parola sıfırlamasını onaylama" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -190,49 +190,49 @@ msgstr "Etkinleştirme bağlantısı geçersiz veya hesap zaten etkinleştirilmi msgid "merge client-stored recently viewed products" msgstr "İstemcide depolanan son görüntülenen ürünleri birleştirme" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Yeni kullanıcıyı bize yönlendiren kullanıcının b64 kodlu uuid'si." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Şifre çok zayıf" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Hatalı biçimlendirilmiş e-posta" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Hatalı biçimlendirilmiş telefon numarası: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Geçersiz öznitelik biçimi: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktivasyon bağlantısı geçersiz!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Hesap zaten etkinleştirildi..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Bir şeyler ters gitti: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Jeton geçersiz!" @@ -276,19 +276,19 @@ msgstr "" msgid "address set" msgstr "Adresler" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Anonim sohbetler için geçerli e-posta gereklidir." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Mesaj 1..1028 karakter olmalıdır." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Size cevap verecek operatörü arıyoruz, bekleyin!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Atanan kişi bir personel kullanıcısı olmalıdır." @@ -552,13 +552,13 @@ msgstr "Saygılarımla,
the %(project_name)s team" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Hesabı Etkinleştir" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Hesabı Etkinleştir" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Şifreyi Sıfırla" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Şifreyi Sıfırla" #: engine/vibes_auth/validators.py:13 msgid "" @@ -583,7 +583,7 @@ msgstr "" "token görünümünün üzerine inşa edilmiştir ve kaba kuvvet saldırılarına karşı" " koruma sağlamak için uygun hız sınırlaması sağlar." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -598,7 +598,7 @@ msgstr "" "yenileme girdilerini doğrulamak ve uygun çıktıları üretmek için ilişkili " "serileştiriciye dayanır." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -606,7 +606,7 @@ msgstr "" "Belirli serileştirme ve doğrulama mantığını kullanarak JSON Web " "Belirteçlerini (JWT) doğrulamaya yönelik bir görünümü temsil eder." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Belirteç geçersiz" diff --git a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo index 40ebe2e345aa9ba4dbd31a779c33d69720205e9b..d5420647f2b9a09cdedcae0b49b6e8b09d1f3d7d 100644 GIT binary patch delta 1157 zcmYk*UucbS9LMp`VY8hbW^H4~w4Jj*4BN1oVVmR61^W|C$cUCPaxoX%+?YAGSV_%EiEz&aKV$1vMJfWVa*YEp#et*8t@6UMqMEl*T+2IUH zuQR0;_!*aBT0lDLkv3xwaeq*%#_}x5k6o^Pm_qyz)A1$d;3u4ezHBKElQCwNREArK zH|0j{$W>S|R18r;9}VLYoWM#jzXyj#|pzz3k4so_@*#g#)HUM8o@<4gFN!DiYB-n4-hw@^&7?{oWfL$ zT^&s%9Sex_up0N^JnX}RcsoqN21pv^;lil8MphBX*d99_~{ z3=&^M+nNZ*;&Zf>e&xn*T*L1ul?W5M-^!Z9i)ksMT4DzS>XgcbN0lkq2(p^sj+$J@|W zY&Y8Xde>&$KzsphrJf=~>m%CXUA&$bOE8Z4RZGGCpw6`k4-t2wA3q>{^$Q!Yh|%p# zbfZmh2iZl9qTQxgvb>5p*oOBp4U5X91z3fxSdV_@*C+)W=nFE2Quu8eo;&S2 z{4x$X(knbb9xId9<9JzII!)l=EuN_Zt>OpBSQ^D8_!s%fyDnMaE<8vcLF+e+3-Bj; z(Wyull8>e2A*{zHoR7VD2p`1>Y=Csi$;L{wr3<@x9oodruIJHKs2{Dsacn?UCYQ7k zgQVBcwx%D`a0qRs-?{mSYy3UIMjm`XwqJQ0q_bF#wgvaG04MPwrtz}nPh8)imwW>A za0*Xg%BJLm5wtIkqV?;hju$I z;_TtXHRPjc*X>qgs>9=wZvn2)=|$\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Cân bằng" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "Đặt hàng" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Đơn hàng" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "Thông tin cá nhân" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Quyền" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "Các ngày quan trọng" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "Thông tin bổ sung" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "Bạn không thể nhảy qua đầu mình!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "Đóng các chủ đề đã chọn" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "Mở các chủ đề đã chọn" @@ -134,7 +134,7 @@ msgstr "Xác minh token" msgid "Verify a token (refresh or access)." msgstr "Xác minh token (cập nhật hoặc truy cập)." -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "Token này hợp lệ" @@ -171,7 +171,7 @@ msgid "confirm a user's password reset" msgstr "Xác nhận việc đặt lại mật khẩu của người dùng" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -190,51 +190,51 @@ msgid "merge client-stored recently viewed products" msgstr "" "Ghép các sản phẩm đã xem gần đây được lưu trữ trên thiết bị của khách hàng" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Mã UUID được mã hóa bằng B64 của người dùng đã giới thiệu người dùng mới cho" " chúng tôi." -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "Mật khẩu quá yếu." -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "Email không hợp lệ" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Số điện thoại không hợp lệ: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Định dạng thuộc tính không hợp lệ: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Liên kết kích hoạt không hợp lệ!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "Tài khoản đã được kích hoạt..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "Có sự cố xảy ra: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token không hợp lệ!" @@ -278,21 +278,21 @@ msgstr "" msgid "address set" msgstr "Địa chỉ" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "Địa chỉ email hợp lệ là bắt buộc cho các cuộc trò chuyện ẩn danh." -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "Thông điệp phải có độ dài từ 1 đến 1028 ký tự." -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "Chúng tôi đang tìm kiếm nhân viên tổng đài để trả lời cho bạn, xin vui lòng " "chờ một lát!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "Người được giao nhiệm vụ phải là người dùng nhân viên." @@ -552,13 +552,13 @@ msgstr "Trân trọng,
Đội ngũ %(project_name)s" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME} | Kích hoạt tài khoản" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME} | Kích hoạt tài khoản" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME} | Đặt lại mật khẩu" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME} | Đặt lại mật khẩu" #: engine/vibes_auth/validators.py:13 msgid "" @@ -583,7 +583,7 @@ msgstr "" "giao diện token cơ sở và đảm bảo giới hạn tốc độ thích hợp để bảo vệ khỏi " "các cuộc tấn công dò mật khẩu." -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -598,7 +598,7 @@ msgstr "" "serializer liên quan để xác thực các đầu vào làm mới token và tạo ra các đầu" " ra phù hợp." -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -606,7 +606,7 @@ msgstr "" "Đại diện cho một giao diện dùng để xác minh JSON Web Tokens (JWT) bằng cách " "sử dụng logic serialization và xác thực cụ thể." -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "Token không hợp lệ" diff --git a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo index 2147cfe960b7608d49f27ce4141d95133a4a2760..3c5d3ff102a99b73d76368124371f745b7bebdb5 100644 GIT binary patch delta 1206 zcmYMzUr5tY6u|Mb{>UcAB4>p*x718CwG%E_nv#s{oU<#>$}#+^DDz{ z5qY03vJK}j2RC>`T5Tew*g*WiE3y?=Zx%_yeB*B80b?Deu-=3Tc)`r~qT41ifO`ID zhR7D2%8>BV#@|e6;$LKsq-2V0#}d3uVhfhw_bid4%zLuqjdY^s_2Fr}feE;RZdC`a z!?jpOekSTg{dB=mGL#dJPfRe8#>7|SAJoK+xgt9;4>fK;{Q~Du4+x<)Fl^>0jc-sJ zm_p6_jMSDnGw-4c%})z6&?hKGO*nxL^qcrB?jr6sj-iuy#yF4p#H;dX7K>2Vt56#~ zZfrw6KVS?R!&eyS&97l9j^Isvg^gIxJLo~ru?^pvxR9#as1Nmq`%PSrmBh`c1s@qF zQ1?Y}6Mn#K;r-_ra0y8+;4|Z1)K7W}^|#Q6dZS_V;SMZ(7k&C-c5*0s_1XVjmc7{h543x#wEzGB delta 1147 zcmXxkJ!n%=6u|NG5Mxpb(HcLn<|U@4AJ(>-KrI^l97HS9B1I~c8d{=KwX`}^i9YIJ zJ2?3eCksX#bP!7wTpaAE5W5Ht3RRbigQ68JqWC|_$@IJD-goXf_uZGg%+2N=FD~;M zMWpD8)Z;IVq8k&*IU*VCBfb|GX+UR_NHsQ@?dAcq3)isThXK4`^OrH|h)kf?yPptA zVlg3J>A^)NH1QAejI62?*@|hrM&e1_fuA;u9AmzgZncqN)Vw?n;Y|$SKXW-<*AQ3Z zKJsI@g*ZzWY$Z1uz4F8~6SYjdGk>EdMw&#nV*_g3i(2?B>IRok8QwR8yCiTX-&sNX^!^+Z#c!AGbYe=)z?`VwlRp|*0~TGWCasBfkd zb$t-SID!G{%eXB}nzxXiq<~?ZL%q9s)T;Vd~2m1KnT}weVfk&R?UR^do8`pHZJ%vh|u&IZmQJzZ>-`yHWGbp%%P|M{(TZ zIphZ=?=h+aCtbdiB=RdM{TJv7#1933I9L3?!2##0pACI=#P6=^bn-KIs#1}_!0`Fp jnN$8xx2`gb$Krm`b!Ya*3acw~E7ERd*piO=A5zi((L{)M diff --git a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index fccaa127..c1ce07ed 100644 --- a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,44 +13,44 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:48 engine/vibes_auth/admin.py:49 +#: engine/vibes_auth/admin.py:50 engine/vibes_auth/admin.py:51 #: engine/vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "平衡" -#: engine/vibes_auth/admin.py:57 +#: engine/vibes_auth/admin.py:59 msgid "order" msgstr "订购" -#: engine/vibes_auth/admin.py:58 engine/vibes_auth/graphene/object_types.py:44 +#: engine/vibes_auth/admin.py:60 engine/vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "订单" -#: engine/vibes_auth/admin.py:68 +#: engine/vibes_auth/admin.py:70 msgid "personal info" msgstr "个人信息" -#: engine/vibes_auth/admin.py:72 engine/vibes_auth/graphene/object_types.py:43 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "权限" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:87 msgid "important dates" msgstr "重要日期" -#: engine/vibes_auth/admin.py:86 +#: engine/vibes_auth/admin.py:88 msgid "additional info" msgstr "其他信息" -#: engine/vibes_auth/admin.py:123 +#: engine/vibes_auth/admin.py:125 msgid "You cannot jump over your head!" msgstr "你不能跳过你的头!" -#: engine/vibes_auth/admin.py:155 +#: engine/vibes_auth/admin.py:157 msgid "Close selected threads" msgstr "关闭选定的线程" -#: engine/vibes_auth/admin.py:159 +#: engine/vibes_auth/admin.py:161 msgid "Open selected threads" msgstr "打开选定的线程" @@ -130,7 +130,7 @@ msgstr "验证令牌" msgid "Verify a token (refresh or access)." msgstr "验证令牌(刷新或访问)。" -#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:78 +#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90 msgid "the token is valid" msgstr "令牌有效" @@ -167,7 +167,7 @@ msgid "confirm a user's password reset" msgstr "确认用户密码重置" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:320 +#: engine/vibes_auth/graphene/mutations.py:317 #: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101 #: engine/vibes_auth/viewsets.py:84 msgid "passwords do not match" @@ -185,49 +185,49 @@ msgstr "激活链接无效或账户已激活" msgid "merge client-stored recently viewed products" msgstr "合并客户存储的最近查看的产品" -#: engine/vibes_auth/graphene/mutations.py:41 +#: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "将新用户推荐给我们的用户的 b64-encoded uuid。" -#: engine/vibes_auth/graphene/mutations.py:61 +#: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" msgstr "密码太弱" -#: engine/vibes_auth/graphene/mutations.py:110 +#: engine/vibes_auth/graphene/mutations.py:112 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: engine/vibes_auth/graphene/mutations.py:120 +#: engine/vibes_auth/graphene/mutations.py:122 msgid "malformed email" msgstr "畸形电子邮件" -#: engine/vibes_auth/graphene/mutations.py:127 +#: engine/vibes_auth/graphene/mutations.py:129 #: engine/vibes_auth/serializers.py:107 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "畸形电话号码:{phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:149 +#: engine/vibes_auth/graphene/mutations.py:151 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:273 +#: engine/vibes_auth/graphene/mutations.py:270 #: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "激活链接无效!" -#: engine/vibes_auth/graphene/mutations.py:276 +#: engine/vibes_auth/graphene/mutations.py:273 msgid "account already activated..." msgstr "帐户已激活..." -#: engine/vibes_auth/graphene/mutations.py:283 -#: engine/vibes_auth/graphene/mutations.py:339 +#: engine/vibes_auth/graphene/mutations.py:280 +#: engine/vibes_auth/graphene/mutations.py:336 msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: engine/vibes_auth/graphene/mutations.py:327 +#: engine/vibes_auth/graphene/mutations.py:324 #: engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "令牌无效!" @@ -267,19 +267,19 @@ msgstr "语言是{settings.LANGUAGES}之一,默认为{settings.LANGUAGE_CODE} msgid "address set" msgstr "地址" -#: engine/vibes_auth/messaging/services.py:51 +#: engine/vibes_auth/messaging/services.py:49 msgid "Valid email is required for anonymous chats." msgstr "匿名聊天需要有效的电子邮件。" -#: engine/vibes_auth/messaging/services.py:59 +#: engine/vibes_auth/messaging/services.py:57 msgid "Message must be 1..1028 characters." msgstr "信息必须为 1...1028 个字符。" -#: engine/vibes_auth/messaging/services.py:95 +#: engine/vibes_auth/messaging/services.py:93 msgid "We're searching for the operator to answer you already, hold by!" msgstr "我们正在寻找接线员,请稍候!" -#: engine/vibes_auth/messaging/services.py:138 +#: engine/vibes_auth/messaging/services.py:136 msgid "Assignee must be a staff user." msgstr "受让人必须是工作人员用户。" @@ -533,13 +533,13 @@ msgstr "致以最崇高的敬意,
%(project_name)s_团队" #: engine/vibes_auth/utils/emailing.py:24 #, python-brace-format -msgid "{config.PROJECT_NAME} | Activate Account" -msgstr "{config.PROJECT_NAME}| 激活帐户" +msgid "{settings.PROJECT_NAME} | Activate Account" +msgstr "{settings.PROJECT_NAME}| 激活帐户" #: engine/vibes_auth/utils/emailing.py:63 #, python-brace-format -msgid "{config.PROJECT_NAME} | Reset Password" -msgstr "{config.PROJECT_NAME}| 重置密码" +msgid "{settings.PROJECT_NAME} | Reset Password" +msgstr "{settings.PROJECT_NAME}| 重置密码" #: engine/vibes_auth/validators.py:13 msgid "" @@ -558,7 +558,7 @@ msgstr "" "代表用于获取一对访问和刷新令牌以及用户数据的视图。该视图管理处理基于令牌的身份验证的流程,客户端可使用提供的凭据获取一对 JWT " "令牌(访问和刷新)。它建立在基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。" -#: engine/vibes_auth/views.py:48 +#: engine/vibes_auth/views.py:52 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -568,13 +568,13 @@ msgid "" msgstr "" "处理刷新令牌以进行身份验证。该类用于为作为身份验证系统一部分的令牌刷新操作提供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化器来验证令牌刷新输入并产生适当的输出。" -#: engine/vibes_auth/views.py:67 +#: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "代表使用特定序列化和验证逻辑验证 JSON Web 标记 (JWT) 的视图。" -#: engine/vibes_auth/views.py:80 +#: engine/vibes_auth/views.py:92 msgid "the token is invalid" msgstr "令牌无效" diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.mo b/evibes/locale/ar_AR/LC_MESSAGES/django.mo index 5b83e1f28cdcfb19bdcd4bf95e96c6ba5f1b96bf..e4dc80283f1599ff688eaf06700857f9b97692fe 100644 GIT binary patch delta 1759 zcmZ9LU2GIp6o4;nsfsO&$Wn!3Z~v@-w9=p$)M%;_Oj@XEF%r~t*iPHUc4jj(i>-!i zu9>*DKtD7iN=`lW;8R2A?hRX=Rr+OeDOPXwwiFW_kMHEx%d3t zyFWkk^})jRjTP@I#!hA}Ggzb4Bk)=o3*&ORQb*S*wF2)%POn#L1KbWb!+r2R_$+LK zufp5l2e1;(LXN8oCHYFpeih!KR6$+i<8C%wht=?Jn1+?9Bv36BN4uan+EbDrhkKCs z!-wH(P|hzwN$@JHfZsw%Jc77ZzrZ^9kC6*XZDsdX6g%Lpa6h~q9)eQIQ7De>lI)k{ zldvBBoA4I6P_kcyhmk)o>C==c_HA%2Y=$q=<(+W3KuT|HRO&7aPvETs9)UIRefS_; zD)9!yr_v2c;N7qaxd%#ReNZ~*LMdnx@>3tOw8Ae-@*hy_n;Ypru~j=CQsL83THFJV z!=VAH1NkT6`scaCw4NpQzys9N(9o&T64%a|wH_b9ZfQcb?8FIC9&C)q} zf2Lx2!BXKi(J?erDyv}1W07hl0U7dGw=*l5_b|(uyqh(qAt8CM{^gi9!mh;>ZI~cO_ejD_%nQ&M2 z7x#AzyMsB`4}8_(Sx&#Np0omc(Dkx5pRO~I9aK+Q{?IYk^7_MHt1~s8o6q^`KyPoi z?)Kc#F?GPUhJ&HdS?})cvacI?o}Ny_-p(GON0#2=Z>c{wWM<-tcrrR4PsPP(CYn-P8vl?Qc?&%Y1msMs^|=EOTjLQXM+9IkPfRFi(5=# z@oCW|*-&FrLHJH%T`DmbqolIAaG~-0@V%z`0uEPb$3${w*_=2_jQCVMouo2lnnN0^ znJt?{M1f_A6XOvbX~m3pB+Y@5->HXWVUCZZHQkB5|LH(|wRbhb6T T($ta`9lI7ea*o{SBCY-xO#S3B delta 1140 zcmY+?OGs2v7{Kx4qnD}USZQh6RmXQFMT$hVNCFFA;8c=`UG;{VdWUf&Z8L;g=Awv0 zs|Z?zVp$|spajt>iXey<_d*Ftiy(2?V-fWKrd!y7Gr#klIgjt0b6++rACE4jC*D+) zeCkf>?l`3?@K8KIlpoleq|{H`Lfn<2R2mLr242Myyn_LJg??Pc9jH>3qN%cQ8#KH5#9lmrHdfiMiVz-KS}}@ym;J; zuVWtjtJ^drf#Icr8RcrfVHGA9C{>R&C{KC= zEAS!8x=Scew}MgWNZ{e*Bz|ncGL(~yqTI|alntgZ9iMr=#W-U2jTL#0tyD?MpvqzX z7WpP*Eh(~wB*ymPD)R1gaz{3CXi?3I7T&5leiX*OQBh)MPKt zLU~dta^kf`zA2S7znI`l3K%6F=3r0f9&;$tZG^&h#OjP#U8M(&vlT@BR;1e+(n~2X z^qbU\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "اسم المشروع" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "اسم الشركة" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "رقم هاتف الشركة" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"معدل الضريبة في الولاية القضائية لشركتك. اترك 0 إذا كنت لا تريد معالجة " +"الضرائب." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "مفتاح API لسعر الصرف" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!، لا تتغير!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "مضيف SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "منفذ SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "استخدام TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "استخدام SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "اسم مستخدم SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "كلمة مرور SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "عنوان مرسل البريد الإلكتروني" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين المجهولين" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين الموثقين" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "تعطيل وظيفة الشراء" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "عنوان URL لواجهة برمجة تطبيقات OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "مفتاح واجهة برمجة تطبيقات OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "مفتاح واجهة برمجة التطبيقات المجردة" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "وكيل HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "كيان لتخزين بيانات الإعلانات" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "كيان لتخزين بيانات التحليلات" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "الخيارات العامة" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "الخيارات القانونية" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "خيارات البريد الإلكتروني" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "خيارات الميزات" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "خيارات تحسين محركات البحث" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "خيارات التصحيح" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,49 +183,34 @@ msgstr "" "\n" "مرحباً بك في وثائق eVibes.\n" "\n" -"eVibes عبارة عن منصة تجارة إلكترونية قوية تتيح لك إطلاق وإدارة متجر إلكتروني " -"من أي نوع بنقرات قليلة.\n" +"eVibes عبارة عن منصة تجارة إلكترونية قوية تتيح لك إطلاق وإدارة متجر إلكتروني من أي نوع بنقرات قليلة.\n" "\n" "## الميزات الرئيسية\n" -"- ** كتالوج المنتجات:** إدارة تفاصيل المنتج والتسعير والمخزون والتوافر عبر " -"فئات متعددة.\n" -"- **إدارة الطلبات:** معالجة الطلبات وتتبع التنفيذ والتعامل مع طلبات العملاء " -"بكفاءة.\n" -"- **المصادقة والتفويض:** مصادقة شاملة للمستخدمين باستخدام رموز JWT المميزة " -"والأذونات المستندة إلى الأدوار.\n" +"- ** كتالوج المنتجات:** إدارة تفاصيل المنتج والتسعير والمخزون والتوافر عبر فئات متعددة.\n" +"- **إدارة الطلبات:** معالجة الطلبات وتتبع التنفيذ والتعامل مع طلبات العملاء بكفاءة.\n" +"- **المصادقة والتفويض:** مصادقة شاملة للمستخدمين باستخدام رموز JWT المميزة والأذونات المستندة إلى الأدوار.\n" "- ** معالجة المدفوعات:** دمج بوابات دفع متعددة وإدارة المعاملات بشكل آمن.\n" -"- ** إدارة المدونة والمحتوى:** إنشاء وإدارة منشورات المدونة والمحتوى " -"التسويقي لمتجرك.\n" -"- ** عمليات B2B:** نقاط نهاية مخصصة للمعاملات بين الشركات وإدارة البيع " -"بالجملة.\n" -"- **دعم متعدد اللغات:** خدمة العملاء في جميع أنحاء العالم مع إمكانات التدويل " -"الكاملة (i18n).\n" -"- **تكامل مخصص:** بنية واجهة برمجة تطبيقات قابلة للتوسيع للتكامل مع المنصات " -"والخدمات الخارجية.\n" -"- **التحليلات والتقارير:** إنشاء تقارير مفصلة عن المبيعات والمخزون وسلوك " -"العملاء.\n" -"- ** تحديثات في الوقت الفعلي:** احصل على بيانات مباشرة عن مستويات المخزون " -"وحالات الطلبات وتغييرات الأسعار.\n" +"- ** إدارة المدونة والمحتوى:** إنشاء وإدارة منشورات المدونة والمحتوى التسويقي لمتجرك.\n" +"- ** عمليات B2B:** نقاط نهاية مخصصة للمعاملات بين الشركات وإدارة البيع بالجملة.\n" +"- **دعم متعدد اللغات:** خدمة العملاء في جميع أنحاء العالم مع إمكانات التدويل الكاملة (i18n).\n" +"- **تكامل مخصص:** بنية واجهة برمجة تطبيقات قابلة للتوسيع للتكامل مع المنصات والخدمات الخارجية.\n" +"- **التحليلات والتقارير:** إنشاء تقارير مفصلة عن المبيعات والمخزون وسلوك العملاء.\n" +"- ** تحديثات في الوقت الفعلي:** احصل على بيانات مباشرة عن مستويات المخزون وحالات الطلبات وتغييرات الأسعار.\n" "\n" "## واجهات برمجة التطبيقات المتاحة\n" "- **واجهة برمجة تطبيقات REST:** واجهة REST كاملة (هذه الوثائق)\n" -"- ** واجهة برمجة تطبيقات GraphiQL:** متوفرة على '/graphql/' مع واجهة " -"GraphiQL للاستعلامات التفاعلية\n" +"- ** واجهة برمجة تطبيقات GraphiQL:** متوفرة على '/graphql/' مع واجهة GraphiQL للاستعلامات التفاعلية\n" "\n" "## المصادقة\n" -"- يتم التعامل مع المصادقة عبر رموز JWT المميزة. قم بتضمين الرمز المميز في " -"رأس \"X-EVIBES-AUTH\" لطلباتك بصيغة \"حامل \".\n" +"- يتم التعامل مع المصادقة عبر رموز JWT المميزة. قم بتضمين الرمز المميز في رأس \"X-EVIBES-AUTH\" لطلباتك بصيغة \"حامل \".\n" "{\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}{\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "}- يتم تدوير رموز التحديث تلقائيًا وإبطالها بعد الاستخدام لتعزيز الأمان.\n" "\n" "## التدويل (i18n)\n" -"- قم بتعيين رأس \"قبول اللغة\" لتحديد لغتك المفضلة (على سبيل المثال، \"قبول " -"اللغة: en-US\").\n" +"- قم بتعيين رأس \"قبول اللغة\" لتحديد لغتك المفضلة (على سبيل المثال، \"قبول اللغة: en-US\").\n" "- يمكن استرداد اللغات المتاحة من نقطة النهاية \"/ التطبيق/اللغات/\".\n" "- جميع المحتويات التي تواجه المستخدم تدعم لغات متعددة خارج الصندوق.\n" "\n" @@ -255,18 +227,54 @@ msgstr "" "## الإصدار\n" "إصدار API الحالي: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "الصفحة الرئيسية" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "قائمة الطعام" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "واجهة المتجر" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "لوحة التحكم" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "الصحة" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "التكوين" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "المستخدمون" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "المجموعات" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "المنتجات" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "الفئات" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "العلامات التجارية" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "المدونات" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "المهام الدورية" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "لوحة المهام" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "الدعم" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo index 8e39564263bc8f7f0889d06d2f9a7963019e9d9a..201ab0f4321ab25b0edd55b2e4978b67e9f6eb5d 100644 GIT binary patch delta 1660 zcmZ9LU1%It6vt0Lt!dI|>{@M-&5fouZPK)cf)Xp0R7#;~yJa^oZ3?-Wx!Il0?%ZL% z%p}O-qeu}ML`%UE1R)O#N)@cd7CYIu;!9t|hl(#gsc(WGFaFQ$ER9tLm)dk0hISM?k`_RY zcoKXCd<#4TRzVKvBaj{5$nDQT4!8yG1#g3JNk4-7z+XY!MgM^O#JiC`+v8x99nItu zvmo0Qa0XlexfVVF+2KQw9sCBeQrko)&|Z)o3XlVx26_Jih^?eS-v1%UN`4A*B3}r+ ze^wm%#2t`pp$$%hzknRj0CeU9`@scp4CKt-%XuAS1-=5efP4nS>@pxLR91!?@8e*4 z*}(l-0OJ_Gj6TeBXab#|fD4E-;LEruxp9D;B^MTrJoxq3xv#wbQdkQmR@u=(Rh6-vb^pAp` zWh6)XewduC>#D2$z^7SHI;KyjWT2|rvlNEfS+=V5w)AUDT6$*kN1w6J)1m9rnM$Q3 zN}gVc>5P)~pq4m$^lNjfD(m8c8(7-$>72CcVi~szoz2iW<%D!zHk8oI0+9$qH(cq& zNumGMY2{hkv#Is0%{q`_eCIAls`rDz7pl~ zT*k^=ndu=)@7ACFX5Wdfh%sGq1-xq=t)CSseL_d`GKde>L^_ort)o> zTpVtUmhI5BoS0Kvi3NN|NSigLOQt8Iw3Un&$C936WuWAx>yeYTL_@dlI(RrMxl$Y% zluK#Lv?ZNS*H={}d{@`i=C#iHXT>*hOh%Te>Q1^L((i0tkCUH^qq{OG?I2G6Ev_|7 z+Ju(!F)hn-bx8_SI-55{)K$|qED_1}I%0VInkiAzc4!Jm88t&e|5X<`bDoh5IzA?a ki&r&jSUfgGB^|c!S^?ZZ>pl;&2Z$?AbpQYW delta 1071 zcmY+?OK1~87zgmL53Q}XX&SBel}w6{XcZrLC_YgUiqxi<=tZ<_lBr3$*$KNF?Sm3L z^x#2q7z8h(f*^tyDR>atB2hsR5f5H`97GgRdse*o|F)~>!0c~k*xm1&Z)Wbu!ol+U zw)!iC){EYazO{yEJKR@`2igyqZzB2$LzripiCW<}Y=@U%4Bmk2;Zqodi?9Py3lWCY z3D>|F;8C~|8n6)- zASZCapU?R73XCE?UBiGASbz=i8RQRN`SZ8FAK@8P=Np_tgk#tyhV%qw<4U}SoZxr3 z5!Un&ZH6(}22a4XP(rTIH0(xvs`v|cedm2&LaxXMxCefQdtq;Q>8Q>^4mbrlkqYD= zUxys{9^}frfn0%KkT=$dMc!}-mU$tJ0iRV2?t+IQSEA%Q4f(wp$UCU`-i9cMcXxny z9IGKGCD4)Y-^Ph?P;OiezH5kCCcbBUZupmXZhT3Wqpv{cR)@~nb6`#)ivFkZuGgV2 z^B1r|uVSnGc_-wJaN{HTxAC2#rr8H|fu?p5OBqfsz0D}OSy8l=E7Pvb=!ZQW`b+bD z{k$a=mX@>)Q^bpIPFW5OB$LBp*jD2cG@uGnPX;z=GceG9+{l??)K&$dyfdzSb@sZyo7#l`ZiP%cVrASX8!4Ny8aSDZ|dtNk@uA zV$d@=n3&xXJlCvWgw0?)CDT^*jwq\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Název projektu" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Název společnosti" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Telefonní číslo společnosti" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Sazba daně v jurisdikci vaší společnosti. Pokud nechcete zpracovávat daně, " +"ponechte 0." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Klíč API pro směnný kurz" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NEMĚŇTE!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Použití protokolu TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Použití protokolu SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Uživatelské jméno SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Heslo SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Adresa odesílatele e-mailů" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Kolik dní uchováváme zprávy od anonymních uživatelů" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Kolik dní uchováváme zprávy od ověřených uživatelů" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Zakázat funkci nákupu" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL rozhraní API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Klíč API OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstraktní klíč API" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Proxy server HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Subjekt pro ukládání dat inzerátů" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Subjekt pro ukládání analytických dat" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Ukládání odpovědí z rozhraní API dodavatelů" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Obecné možnosti" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Právní možnosti" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Možnosti e-mailu" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Možnosti funkcí" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Možnosti SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Možnosti ladění" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,64 +183,44 @@ msgstr "" "\n" "Vítejte v dokumentaci systému eVibes.\n" "\n" -"eVibes je výkonná platforma pro elektronické obchodování, která umožňuje " -"spustit a spravovat internetový obchod jakéhokoli druhu na několik " -"kliknutí.\n" +"eVibes je výkonná platforma pro elektronické obchodování, která umožňuje spustit a spravovat internetový obchod jakéhokoli druhu na několik kliknutí.\n" "\n" "## Klíčové funkce\n" -"- **Katalog produktů:** Správa podrobností o produktech, cen, skladových " -"zásob a dostupnosti v několika kategoriích.\n" -"- **Správa objednávek:** Zpracovávejte objednávky, sledujte jejich plnění a " -"efektivně vyřizujte požadavky zákazníků.\n" -"- **Ověřování a autorizace:** Komplexní ověřování uživatelů pomocí tokenů " -"JWT a oprávnění na základě rolí.\n" -"- **Zpracování plateb:** Integrace více platebních bran a bezpečná správa " -"transakcí.\n" -"- **Správa blogu a obsahu:** Vytváření a správa příspěvků na blogu a " -"marketingového obsahu pro váš obchod.\n" -"- **Provoz B2B:** Vyhrazené koncové body pro transakce mezi podniky a správu " -"velkoobchodu.\n" -"- **Vícejazyčná podpora:** Obsluhujte zákazníky po celém světě díky plným " -"možnostem internacionalizace (i18n).\n" -"- **Vlastní integrace:** Rozšiřitelná architektura API pro integraci s " -"externími platformami a službami.\n" -"- **Analytika a reporting:** Generování podrobných reportů o prodeji, " -"zásobách a chování zákazníků.\n" -"- **Aktualizace v reálném čase:** Získávejte živé údaje o stavu zásob, stavu " -"objednávek a změnách cen.\n" +"- **Katalog produktů:** Správa podrobností o produktech, cen, skladových zásob a dostupnosti v několika kategoriích.\n" +"- **Správa objednávek:** Zpracovávejte objednávky, sledujte jejich plnění a efektivně vyřizujte požadavky zákazníků.\n" +"- **Ověřování a autorizace:** Komplexní ověřování uživatelů pomocí tokenů JWT a oprávnění na základě rolí.\n" +"- **Zpracování plateb:** Integrace více platebních bran a bezpečná správa transakcí.\n" +"- **Správa blogu a obsahu:** Vytváření a správa příspěvků na blogu a marketingového obsahu pro váš obchod.\n" +"- **Provoz B2B:** Vyhrazené koncové body pro transakce mezi podniky a správu velkoobchodu.\n" +"- **Vícejazyčná podpora:** Obsluhujte zákazníky po celém světě díky plným možnostem internacionalizace (i18n).\n" +"- **Vlastní integrace:** Rozšiřitelná architektura API pro integraci s externími platformami a službami.\n" +"- **Analytika a reporting:** Generování podrobných reportů o prodeji, zásobách a chování zákazníků.\n" +"- **Aktualizace v reálném čase:** Získávejte živé údaje o stavu zásob, stavu objednávek a změnách cen.\n" "\n" "## Dostupná rozhraní API\n" "- **REST API:** Plné rozhraní RESTful (tato dokumentace).\n" -"- **GraphQL API:** K dispozici na adrese `/graphql/` s rozhraním GraphiQL " -"pro interaktivní dotazy.\n" +"- **GraphQL API:** K dispozici na adrese `/graphql/` s rozhraním GraphiQL pro interaktivní dotazy.\n" "\n" "## Ověřování\n" -"- Ověřování se provádí pomocí tokenů JWT. Token zahrňte do hlavičky `X-" -"EVIBES-AUTH` svých požadavků ve formátu `Bearer `.\n" +"- Ověřování se provádí pomocí tokenů JWT. Token zahrňte do hlavičky `X-EVIBES-AUTH` svých požadavků ve formátu `Bearer `.\n" "- Životnost přístupového tokenu je {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "}. {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Životnost tokenu pro obnovení je {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hodin.\n" -"- Tokeny pro obnovení jsou po použití automaticky rotovány a zneplatněny z " -"důvodu vyšší bezpečnosti.\n" +"- Tokeny pro obnovení jsou po použití automaticky rotovány a zneplatněny z důvodu vyšší bezpečnosti.\n" "\n" "## Internacionalizace (i18n)\n" -"- Nastavte hlavičku `Accept-Language` tak, aby určovala preferovaný jazyk " -"(např. `Accept-Language: en-US`).\n" +"- Nastavte hlavičku `Accept-Language` tak, aby určovala preferovaný jazyk (např. `Accept-Language: en-US`).\n" "- Dostupné jazyky lze získat z koncového bodu `/app/languages/`.\n" -"- Veškerý obsah směřující k uživateli podporuje více jazyků hned po vybalení " -"z krabice.\n" +"- Veškerý obsah směřující k uživateli podporuje více jazyků hned po vybalení z krabice.\n" "\n" "## Formáty odpovědí\n" "Rozhraní API podporuje více formátů odpovědí:\n" "- **JSON** (výchozí, formátováno camelCase).\n" "- **XML** (přidejte `?format=xml` nebo nastavte `Accept: application/xml`).\n" -"- **YAML** (přidejte `?format=yaml` nebo nastavte `Accept: application/x-" -"yaml`)\n" +"- **YAML** (přidejte `?format=yaml` nebo nastavte `Accept: application/x-yaml`)\n" "\n" "## Stav a monitorování\n" "- Kontroly stavu: `/health/`\n" @@ -262,18 +229,54 @@ msgstr "" "## Verze\n" "Aktuální verze API: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Nabídka" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Výloha" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Přístrojová deska" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Zdraví" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfigurace" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Uživatelé" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Skupiny" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produkty" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategorie" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Značky" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposty" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Pravidelné úkoly" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Podpora" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.mo b/evibes/locale/da_DK/LC_MESSAGES/django.mo index c8da5aef27d26e4414ee207bf580b6adb31de7a2..a4c0d85d9426327759ff58410d902519229a3ce3 100644 GIT binary patch delta 1650 zcmZ9L-)me&6vvOXMy*ZL)T}jaHl1pd+NMeTQCh9PFiI&lF)N$;QiR;>o!!0e?w#w* z+?Xh`6hW|pJ}iO{g1)rS2SupDY9GYxqxH!?_>{ju3qA;fKKT9Ky%EXbp8J_IGk4~k z@65gN>=!SzH}~!QL|{|!F}S}&z`wJ&EpiaE52E8Zcn^3MyboLiS;<9^ z3+p^~dHgPT82ulDcY|N%e0i{M@01o%2so&rB>qofb^^)sF<_A@;V zQi1azr47J`!OI{M`wHZO--A?S1EfMfgG~4qh(|Va{sTUU_`rBy=_f$O3t*cIRng!= zG01owJOy3?DQy=V0sjCg-2h&cb`nJHG6kX-c@D%QrMy1@sqA}Tb|*j{!8MTkbr0eE zp_26S3AaETi)?}qfww^>G_3lSkAlmHCqN$6`#C=bIqy>t%4TgI4Udh+i^>9MRFL29 zW`O;(OeixYrff6?=cQql$U*kQc_cJm)?;u=4nYJzhD^Y>jEU1&7^|fng&%=a1u8{V zco)W=!Ha(yf4}WUC1}UtlW?9HsO8zjnwIu;ow`}jMwQO=;EyNf znx>W*=bg;iAP$|p7Fb?%k2yWBYe7>jCO$H;lZ7B^sw#F>ChL&}9jEe2(9+6O6*5s3(@KJPy;B%^>~U=) z6Gj!a6u5?yQr*N_#c69r+ikN2+lFbyyUy~^ayv~DW4-XJEJw7~ltm3Hiq#vbjT{zb zK3rwpq;_l588xqiRjnRXQ8u7L6Cd^JtswTw8wIs0+BxNeHSK2Pg43#8p3k^6UnVWG zwAXJBUD`cM5u-S4_O8}sp?B3bw3YK)I-w@NeyLL`Trc0p_{sD zVhGy8Sf*gZcZ%bUcG>s3-fLORzVpFqQ%kuKpvwi`sYrzoa`nFr-Ik~giV6{f5E44y yyK+L+S0kswR7DNs(d))Y$Ev`q6GYHH=Ob?pr9T3XBWoZHJ56=j#UTK)wh>p&I& delta 1119 zcmY+?PfQa*6bA4oASxDGP*9+>1O6i-AtpxAsEH&dL_kPdxEZpvQ`mNQr|wP_ywrmx zaxfew+$7;(OpFJk-1J~#yl6ae)}BZ_Xt;_uzqhVNCK-M+rL*sw*ImE%_DZ$Z*04$# zeV9qiGkb`J;N?2}!PtStCZb>P5cc_Iq6A!o9dH@;!*zHZeuS-X8+Jl!A;OZnU_0!G zeEuqo6IE#v3p}4@VFN6}b5Oxy_!RPiuaE<5N7msqmec{$@C59J*Wp2E!2{5R9N=!W ze;DmoU@z*^8WtSj9oz>$K|Z({?Y~5B!CUCg5BLNJZs3|6>>H|bupP)ZjG>L(kv@0~ zj=>(NA|Jz}*uQ|Cs81iF4{GoT_CFy9isKY_qzj&hX~-R!fqdf?*alxhWTN+wTfZ6o ze+zO)8d85cB_Ka{2y*aCu*x?b!-5|$4f#EgFa{q%?#L?Smaf75@Ok8Gh=zn`K=^YU zhTIK-iTeKr2jk*AI5h6a??;vRJ>!&oBQC-%Y{cY3JnAv|_v6lR*j~)PgF|yG_eLKe zPuMXI&!Y>IFTjIe*8c~0fSNYm)W@4TME{%>*ttQgq8CKjS6b$@%$r&=Wwx7Nna?eA zDd|bya>Qg=+sX@QG@G3gQ@&bUqEY2ab1#0%IPuZp3Cngw!B?(O;Wz1~> zQ*PPvmUexHYDH8t-{WV^K%(1BCT0h;@+F?(Y06Z}W#wziT0v<}S$>|T11U0@@zCse zX5)10gP5uHET80n(s87)y?mf;$FaS6>4!lFQG|mQrEBh|ZkxumNY2=PDNyc$%u6p2 zo^{6~T&E~YT55A4eX(=*7qoO_L3v)qb\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Projektets navn" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Virksomhedens navn" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Virksomhedens telefonnummer" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Skattesats i din virksomheds jurisdiktion. Lad 0 stå, hvis du ikke ønsker at" +" behandle skatter." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "API-nøgle til valutakurs" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!SKIFT IKKE!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP-vært" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Brug TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Brug SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP-brugernavn" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP-adgangskode" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Adressen på e-mailens afsender" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Hvor mange dage vi gemmer beskeder fra anonyme brugere" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Hvor mange dage vi gemmer beskeder fra godkendte brugere" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Deaktiver købsfunktionalitet" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API-nøgle" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstrakt API-nøgle" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "En enhed til lagring af annonceringsdata" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "En enhed til lagring af analysedata" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Gem svar fra leverandørers API'er" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Generelle indstillinger" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Juridiske muligheder" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Indstillinger for e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Funktioner Indstillinger" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO-muligheder" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Indstillinger for fejlfinding" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,53 +183,36 @@ msgstr "" "\n" "Velkommen til eVibes' dokumentation.\n" "\n" -"eVibes er en stærk e-handelsplatform, der giver dig mulighed for at starte " -"og administrere en onlinebutik af enhver art med blot nogle få klik.\n" +"eVibes er en stærk e-handelsplatform, der giver dig mulighed for at starte og administrere en onlinebutik af enhver art med blot nogle få klik.\n" "\n" "## Nøglefunktioner\n" -"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og " -"tilgængelighed på tværs af flere kategorier.\n" -"- Ordrehåndtering:** Behandl ordrer, spor opfyldelse og håndter " -"kundeanmodninger effektivt.\n" -"- Godkendelse og autorisation:** Omfattende brugergodkendelse med JWT-tokens " -"og rollebaserede tilladelser.\n" -"- **Betalingsbehandling:** Integrer flere betalingsgateways og håndter " -"transaktioner sikkert.\n" -"- Blog- og indholdsstyring: ** Opret og administrer blogindlæg og " -"markedsføringsindhold til din butik.\n" -"- **B2B Operations:** Dedikerede slutpunkter til business-to-business-" -"transaktioner og engrosadministration.\n" -"- Flersproget support:** Betjen kunder over hele verden med fuld " -"internationalisering (i18n).\n" -"- Brugerdefinerede integrationer:** Udvidelig API-arkitektur til integration " -"med eksterne platforme og tjenester.\n" -"- Analyse og rapportering:** Generer detaljerede rapporter om salg, " -"lagerbeholdning og kundeadfærd.\n" -"- Opdateringer i realtid:** Få live-data om lagerniveauer, ordrestatus og " -"prisændringer.\n" +"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og tilgængelighed på tværs af flere kategorier.\n" +"- Ordrehåndtering:** Behandl ordrer, spor opfyldelse og håndter kundeanmodninger effektivt.\n" +"- Godkendelse og autorisation:** Omfattende brugergodkendelse med JWT-tokens og rollebaserede tilladelser.\n" +"- **Betalingsbehandling:** Integrer flere betalingsgateways og håndter transaktioner sikkert.\n" +"- Blog- og indholdsstyring: ** Opret og administrer blogindlæg og markedsføringsindhold til din butik.\n" +"- **B2B Operations:** Dedikerede slutpunkter til business-to-business-transaktioner og engrosadministration.\n" +"- Flersproget support:** Betjen kunder over hele verden med fuld internationalisering (i18n).\n" +"- Brugerdefinerede integrationer:** Udvidelig API-arkitektur til integration med eksterne platforme og tjenester.\n" +"- Analyse og rapportering:** Generer detaljerede rapporter om salg, lagerbeholdning og kundeadfærd.\n" +"- Opdateringer i realtid:** Få live-data om lagerniveauer, ordrestatus og prisændringer.\n" "\n" "## Tilgængelige API'er\n" "- **REST API:** Fuld RESTful-grænseflade (denne dokumentation)\n" -"- GraphQL API:** Tilgængelig på `/graphql/` med GraphiQL-grænseflade til " -"interaktive forespørgsler\n" +"- GraphQL API:** Tilgængelig på `/graphql/` med GraphiQL-grænseflade til interaktive forespørgsler\n" "\n" "## Autentificering\n" -"- Autentificering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-" -"AUTH`-headeren i dine anmodninger i formatet `Bearer `.\n" +"- Autentificering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-AUTH`-headeren i dine anmodninger i formatet `Bearer `.\n" "- Adgangstokenets levetid er {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Opdateringstokenets levetid er {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} timer.\n" -"- Refresh-tokens bliver automatisk roteret og ugyldiggjort efter brug for at " -"øge sikkerheden.\n" +"- Refresh-tokens bliver automatisk roteret og ugyldiggjort efter brug for at øge sikkerheden.\n" "\n" "## Internationalisering (i18n)\n" -"- Indstil headeren `Accept-Language` til at angive dit foretrukne sprog (f." -"eks. `Accept-Language: en-US`).\n" +"- Indstil headeren `Accept-Language` til at angive dit foretrukne sprog (f.eks. `Accept-Language: en-US`).\n" "- Tilgængelige sprog kan hentes fra `/app/languages/` endpoint.\n" "- Alt brugervendt indhold understøtter flere sprog fra starten.\n" "\n" @@ -250,8 +220,7 @@ msgstr "" "API'en understøtter flere svarformater:\n" "- **JSON** (standard, camelCase-formateret)\n" "- XML** (tilføj `?format=xml` eller indstil `Accept: application/xml`)\n" -"- **YAML** (tilføj `?format=yaml` eller indstil `Accept: application/x-" -"yaml`)\n" +"- **YAML** (tilføj `?format=yaml` eller indstil `Accept: application/x-yaml`)\n" "\n" "## Sundhed og overvågning\n" "- Sundhedstjek: `/health/`\n" @@ -260,18 +229,54 @@ msgstr "" "## Version\n" "Nuværende API-version: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Hjem" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Butiksfacade" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Dashboard" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Sundhed" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfig" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Brugere" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grupper" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produkter" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategorier" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Mærker" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogindlæg" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Periodiske opgaver" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Opgavetavle" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Støtte" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.mo b/evibes/locale/de_DE/LC_MESSAGES/django.mo index ab2e178a4dba52e30c2ce4b4f9b96a75f545fb66..b14a8bb6324289ee2f707f82035ec687a7a82fc3 100644 GIT binary patch delta 1662 zcmZ9LUuaxK6o;p=)>uuWv1x0YWT)DircK(Yg-UCw#?nOGZDKdUha%=?cd~n%-MQ<` zz0DsDi*HI_#Kk9tzJ!9JAVft`kR}L%eNcQU2=&b;6MY?&9n7eU0dH*j3ZbN7H?7N6ui;K596zQl)AWGsjuN9_}x2{dI%1{UGOA41Yd>+ z;1awaUWMD>N08&{vzGr&YkdtqtW;gyVDcy%Zov-t5A259I-3{uKnXMiCD8Gfe+C}M zKL?+IZ$LT!Ig|v~;8yqxl*DgBLaRSu2L7A+b*1*PdmkST!*+NMJ^;s|RB{nYVAJw_ z%U_23`F;i72S07Ce*vfPziWN(rc7Dyh4;dP@Ksbk0`Jth>7A}-hHv&Ym3SBKW#h+C z+VVXdg14b0lp%dlWB`gH!;o0&6qNNGB&2!;YIq4!thxdv?gvoze+lc7*$+%4&`&M? z3Qyzz4#(gD-Au3wrN?hUspJ}zR(%3R+BL`#^)r;WaT}7eYDXqfwjVwShoK~TdO!Ua zX-8Whrl4f@8hi@A4khpklzppk8D58y_?gF=9EEbhINSndjVZ?N5^zrympLq-rTp z-kT`c^DIAYnDlw`ke;=W$!tM8iqN6e zml79xf=WUXWid+J#;r$n)&!T09@b&Hpo@|1kM(?DV;x5txeCU69R~}>A5~M{=zKn# zax$A2IiWw1)v#pr^T})}m|+MFq1U;bZCr=)fc+i{SpfS;#|F^6}opkz}+3cHn^LE~!dV8X_)ZTE1 z&~~ABqwifqv=1Jw!ynpDSZX5r1vg`!YbI)iGq4lhf-!g(_Q2P$4KBm&kXnc^q%ODx z#vsQZgCU|CB{9JIGzlAE2_A$F9D?^C2YiH_z;a+6qA{dS7=gWT2RscoLJ2oO3vvRN zgZcGfej7%yKh0yn2|R=A;Ty<-?}GV(YlJ-H4ABJ3! zB*c#{;t#LVRk#VxLq6Dj$Q5}6Yy99P2E4!`JOGy<2egTm1;da7;*cwJB=96eLHxS| z{LMQcA3~txpsS77=R&HTB$g$rnK~?Gmdm~G~p?c zN{#xaM^g*^Z9kgL`N*X`BjxgxvQ*JlL6XY$vy87~nbOkLo+@f(zC>=CYod3zpIT0N zV#3zSwN=4VIN9n`#Ff;vHqXU=(-@7I!Kgl*$`)ibkJk`Dewe3UJ=Jqndx}P?`6-!E Mww8HS{y$Ip4X_cn?EnA( diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po index f954feee..7e059b87 100644 --- a/evibes/locale/de_DE/LC_MESSAGES/django.po +++ b/evibes/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Name des Projekts" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Name des Unternehmens" @@ -30,154 +26,145 @@ msgid "Phone number of the company" msgstr "Telefonnummer des Unternehmens" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Steuersatz in dem Land, in dem Ihr Unternehmen ansässig ist. Lassen Sie 0 " +"stehen, wenn Sie keine Steuern verarbeiten wollen." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Wechselkurs-API-Schlüssel" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NICHT ÄNDERN!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP-Host" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP-Port" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Use TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP-Benutzername" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP-Kennwort" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Die Adresse des Absenders der E-Mail" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Wie viele Tage wir Nachrichten von anonymen Nutzern speichern" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "" "Wie viele Tage wir Nachrichten von authentifizierten Benutzern speichern" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Kauffunktionalität deaktivieren" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstrakter API-Schlüssel" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP-Proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Eine Einheit zur Speicherung von Werbedaten" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Eine Einheit zur Speicherung von Analysedaten" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Speichern von Antworten aus den APIs von Anbietern" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Allgemeine Optionen" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Rechtliche Optionen" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "E-Mail-Optionen" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Merkmale Optionen" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO-Optionen" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Debugging-Optionen" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -189,7 +176,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -197,66 +184,44 @@ msgstr "" "\n" "Willkommen bei der eVibes-Dokumentation.\n" "\n" -"eVibes ist eine leistungsstarke E-Commerce-Plattform, die es Ihnen " -"ermöglicht, mit nur wenigen Klicks einen Online-Shop jeglicher Art zu " -"eröffnen und zu verwalten.\n" +"eVibes ist eine leistungsstarke E-Commerce-Plattform, die es Ihnen ermöglicht, mit nur wenigen Klicks einen Online-Shop jeglicher Art zu eröffnen und zu verwalten.\n" "\n" "## Hauptmerkmale\n" -"- **Produktkatalog:** Verwalten Sie Produktdetails, Preise, Bestand und " -"Verfügbarkeit über mehrere Kategorien hinweg.\n" -"- **Auftragsverwaltung:** Verarbeiten Sie Aufträge, verfolgen Sie die " -"Ausführung und bearbeiten Sie Kundenanfragen effizient.\n" -"- **Authentifizierung & Autorisierung:** Umfassende " -"Benutzerauthentifizierung mit JWT-Tokens und rollenbasierten " -"Berechtigungen.\n" -"- **Zahlungsabwicklung:** Integrieren Sie mehrere Zahlungsgateways und " -"verwalten Sie Transaktionen auf sichere Weise.\n" -"- **Blog & Content Management:** Erstellen und verwalten Sie Blogbeiträge " -"und Marketinginhalte für Ihren Shop.\n" -"- **B2B-Betrieb:** Dedizierte Endpunkte für Business-to-Business-" -"Transaktionen und Großhandelsmanagement.\n" -"- **Mehrsprachige Unterstützung:** Bedienen Sie Kunden auf der ganzen Welt " -"mit vollständigen Internationalisierungsfunktionen (i18n).\n" -"- **Benutzerdefinierte Integrationen:** Erweiterbare API-Architektur für die " -"Integration mit externen Plattformen und Diensten.\n" -"- **Analytik & Reporting:** Generieren Sie detaillierte Berichte über " -"Verkäufe, Bestände und Kundenverhalten.\n" -"- **Echtzeit-Updates:** Erhalten Sie Live-Daten zu Lagerbeständen, " -"Bestellstatus und Preisänderungen.\n" +"- **Produktkatalog:** Verwalten Sie Produktdetails, Preise, Bestand und Verfügbarkeit über mehrere Kategorien hinweg.\n" +"- **Auftragsverwaltung:** Verarbeiten Sie Aufträge, verfolgen Sie die Ausführung und bearbeiten Sie Kundenanfragen effizient.\n" +"- **Authentifizierung & Autorisierung:** Umfassende Benutzerauthentifizierung mit JWT-Tokens und rollenbasierten Berechtigungen.\n" +"- **Zahlungsabwicklung:** Integrieren Sie mehrere Zahlungsgateways und verwalten Sie Transaktionen auf sichere Weise.\n" +"- **Blog & Content Management:** Erstellen und verwalten Sie Blogbeiträge und Marketinginhalte für Ihren Shop.\n" +"- **B2B-Betrieb:** Dedizierte Endpunkte für Business-to-Business-Transaktionen und Großhandelsmanagement.\n" +"- **Mehrsprachige Unterstützung:** Bedienen Sie Kunden auf der ganzen Welt mit vollständigen Internationalisierungsfunktionen (i18n).\n" +"- **Benutzerdefinierte Integrationen:** Erweiterbare API-Architektur für die Integration mit externen Plattformen und Diensten.\n" +"- **Analytik & Reporting:** Generieren Sie detaillierte Berichte über Verkäufe, Bestände und Kundenverhalten.\n" +"- **Echtzeit-Updates:** Erhalten Sie Live-Daten zu Lagerbeständen, Bestellstatus und Preisänderungen.\n" "\n" "## Verfügbare APIs\n" "- **REST API:** Vollständige RESTful-Schnittstelle (diese Dokumentation)\n" -"- **GraphQL API:** Verfügbar unter `/graphql/` mit GraphiQL-Schnittstelle " -"für interaktive Abfragen\n" +"- **GraphQL API:** Verfügbar unter `/graphql/` mit GraphiQL-Schnittstelle für interaktive Abfragen\n" "\n" "## Authentifizierung\n" -"- Die Authentifizierung erfolgt über JWT-Tokens. Fügen Sie das Token in den " -"`X-EVIBES-AUTH`-Header Ihrer Anfragen im Format `Bearer ` ein.\n" +"- Die Authentifizierung erfolgt über JWT-Tokens. Fügen Sie das Token in den `X-EVIBES-AUTH`-Header Ihrer Anfragen im Format `Bearer ` ein.\n" "- Die Lebensdauer des Zugangstokens beträgt {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Die Lebensdauer von Auffrischungstoken beträgt {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} Stunden.\n" -"- Refresh-Tokens werden automatisch rotiert und nach der Verwendung ungültig " -"gemacht, um die Sicherheit zu erhöhen.\n" +"- Refresh-Tokens werden automatisch rotiert und nach der Verwendung ungültig gemacht, um die Sicherheit zu erhöhen.\n" "\n" "## Internationalisierung (i18n)\n" -"- Setzen Sie den `Accept-Language`-Header, um Ihre bevorzugte Sprache " -"anzugeben (z.B. `Accept-Language: en-US`).\n" -"- Die verfügbaren Sprachen können über den Endpunkt `/app/languages/` " -"abgerufen werden.\n" +"- Setzen Sie den `Accept-Language`-Header, um Ihre bevorzugte Sprache anzugeben (z.B. `Accept-Language: en-US`).\n" +"- Die verfügbaren Sprachen können über den Endpunkt `/app/languages/` abgerufen werden.\n" "- Alle benutzerseitigen Inhalte unterstützen von Haus aus mehrere Sprachen.\n" "\n" "## Antwortformate\n" "Die API unterstützt mehrere Antwortformate:\n" "- **JSON** (Standard, camelCase-formatiert)\n" -"- XML** (fügen Sie `?format=xml` hinzu oder setzen Sie `Accept: application/" -"xml`)\n" -"- **YAML** (fügen Sie `?format=yaml` hinzu oder legen Sie `Accept: " -"application/x-yaml` fest)\n" +"- XML** (fügen Sie `?format=xml` hinzu oder setzen Sie `Accept: application/xml`)\n" +"- **YAML** (fügen Sie `?format=yaml` hinzu oder legen Sie `Accept: application/x-yaml` fest)\n" "\n" "## Gesundheit & Überwachung\n" "- Gesundheitsprüfungen: `/health/`\n" @@ -265,18 +230,54 @@ msgstr "" "## Version\n" "Aktuelle API-Version: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Startseite" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menü" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Schaufenster" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Dashboard" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Gesundheit" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfigurieren Sie" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Benutzer" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Gruppen" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produkte" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategorien" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Marken" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Regelmäßige Aufgaben" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Aufgabentafel" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Unterstützung" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.mo b/evibes/locale/en_GB/LC_MESSAGES/django.mo index 16a523840d0bc5e90301169ff7d3daac122050fe..830b3e2180ef8066fca7e23cb44846ec35a6b9a1 100644 GIT binary patch delta 1581 zcmc(ePe>F|9LIn8KXcu(-PGL8S7w`8TLf9!cOXmq(T^(;u(BbLmF)vr*%Kf)a;_EMpA(Py6PG}a(;!RhfGpj8 ze|;HbX;=LDpFXQaN!lO?WxYMTpL4PCMGbkQQUP2{ofqdzowLksa46!Lz>_=UE^!7m z!dW^tmb3%TN}*B0k3sG5Ej!>3SYlR%Ee7XL$X)ZNVO97pL8z$^FH6lzxt{~cMoT(bMI(vCxEQzOLXJjsEo0BRn~|7Xs2@2N*V9@? zjAd;@nuBO_*TvXI^kjq0XD=e2oV$QglZL{iRYH8ba4jUEl?mLXF{QY18WMY#{6 z(Hb0)a+0=kr-RdZC!3X)O}y&WgVBPpP_HmdG3Qu@!e%~~bLXUEZ6)s!ab3Hni#}m^ z3nC@Wm@TerrY&qKpiEL%O4!0)9c?lBRcU|NdCt<^8Vc-=o2tnPQg+*q`& M=`SQ&{I3%I0?Dx-1poj5 delta 1046 zcmb8tKWGzS7{~F)w*HH?N&lp3Q`3v6R9h6mp-7P~g(A@u5}}hNwHIt`a^Z4foq~gd zE)HiW6%^cDgo1-2qBvM_QruJ!bZRM%cJup7PjORUc=EaTxc7aZ`{fqLUXM0DceO1V zV;|K|4R10#ilZ(3Fn(Y;X10#q%x8C+C2#?I@j4FTJ=~AW*okYn2d%@5OY6fV4x-kd z#JE|*a$K;#O=BCD@i=-of)7v&KA{>|i)>*vm)45|cmPv4jytf3+p&Ub;Bqv-7R_&B zhV$(%7i!=+ZpAmKh3}&I$H=cZMLMgfM8}32fL3-;YGikT#`o(!CR}1F6YTYIZg-K`9_ZF_$gjaFHfwY%6U7VYDO1@Wd zyyjEki*&O4OtIoRUdahAxK7RY%I^6fT!|kGhZ3nUmzW+3Jl|zaHL(1pTFvtVD-`P& pXS||6YiH}Olh0?H7P9%J!=1VIe{3ealg@-M(>;GXfA~Mnx1Vt_n56&! diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.po b/evibes/locale/en_GB/LC_MESSAGES/django.po index aaa7ebd2..bdda740d 100644 --- a/evibes/locale/en_GB/LC_MESSAGES/django.po +++ b/evibes/locale/en_GB/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,10 +17,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Name of the project" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Name of the company" @@ -34,153 +30,144 @@ msgid "Phone number of the company" msgstr "Phone number of the company" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!DO NOT CHANGE!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Use TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP username" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP password" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "The address of the emails sender" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "How many days we store messages from anonymous users" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "How many days we store messages from authenticated users" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstract API Key" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "General Options" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Legal Options" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO Options" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Debugging Options" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -192,7 +179,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -200,53 +187,36 @@ msgstr "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -263,18 +233,54 @@ msgstr "" "## Version\n" "Current API version: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Storefront" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Dashboard" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Health" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Config" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Users" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Groups" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Products" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Categories" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Brands" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Periodic Tasks" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Support" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.mo b/evibes/locale/en_US/LC_MESSAGES/django.mo index 64c43166d839ac3f1610b22695d21018784e0af8..e14386d7ca6b046d5709c2d0610def2b0862cd3f 100644 GIT binary patch delta 1628 zcmc(ePe@cz6vj_!n)zo^o1D_gTWY4JRtSX^hJ`4MIWZ#?68N0C&ODuYcX;cf;Yela1ks6 zAA>kfPrdk+x4#C~66I+flYMw#1FQyrfPS#dSG=eRmV)m92`gd##{HJP2LZJJHR&ZDpc+Q%{*GVU01B|JM_mHDi0Q=4S+0dFUZnf2DzYl zkQKQFvLbiAc){CW0+E}ZfUN9mkQ;apva+8*zUL>H=R}nUiizq#j)Nde+X}L@S3pj1 z4;0`M$kMKYEbUv6rTqx9w4c4W0s$)<09n~Skd-|Paw8+nc>kO@;w=~;$Fm?yn*&+8 z2j2cekfmMr)=NZjzY=6=>p>{%p5gPHi;X|jJ?^Yn02fo`#`$9BEOQGSint~)a%bEn z?xF@bOUK5NcEDLFG)nj}s13ephr9_(%&M@p!}%3**ZgW&6)w1G00aMN{QGS+e4ws% zVmu5F!11Zje)y&pMrt3eESAhv`1{3VZ^l+>=_F-V_ky+=D|A<{9vw`nL`G>x)1Ylw zaZTq9M<$eQN=%hCZ6@e~p_5a}u;YcV)v*R!Wiy(FqtUPk+iEUH!_r7O$%0j*PKIQ{ zNQtqGV=7D2s9~nWG;S5jU7=BFW$B`kmO@PnR3c(3oiVIj!S6eMLfWQ^n=uhJ^sJ_E zQdv@1+4PjOw>(X_HlB?+x-jXR%x5zhWjn;D+!`^P6E=DfrX^;wwyBYn>)|Xpm9;l7 z?GYhqT$AFMFx?FiS5~_tt{avk93`MuOlmD0V@~QG8rM=pA|aR2P=sltN_*v-FI@Fk VMXdT$#6nlFCGZbqoByw}{RXqFEqnj~ delta 1086 zcmbW#KTH#09LDjVfd4Aef`anLay1$VV2s9rp&<^MGzMvt*3pnF9I>_S+gwjAE}a-$ zbhw!4U}VtQ0VfvXrUn-mW1>znY0$wz2NS=)Bhn|kR z!Z^wtVovN3If>~uei+}e925D02UySV7fE0f`|uWy;xZn?7ub!P*pJdB!l4XcFOH(# zKZS9TmSj0#f0@M&EaMq8IEjx?Z+MRyVAI;h-5g3E4&!kg#PhfhUEGUR)Brc^ddaTu zV2bC<0}eF68t%rIs5id0>vz_Vc$s!SV~HCs@R}OvDNoga&rutBi`vLn)JFQLRU4T? zZ6t>psEoZlUz!}~2Dg#DI_@Whd=05jGiY9rTC8(Bg!$Yaz- zo}s?jE7SmQu%#z9?1?X!V*L{}z;JS_kulWkPTO_bdJZWh`gS0C_(9ZG946cR8QOsE zsiTL##FuVW_%>9#50o@ z-BQI_@J-b*(UmgeRz1foIKdUqnKRY8TU-3+T-`TiZ!QQw#ZQIfiNP?Nm>my{@3BWM wko>iJ-S~kN+{V?Sas7F@)bN~qemb%+onIO2&UbDjV7Q!2jr>QZiEU((U)+DD?EnA( diff --git a/evibes/locale/en_US/LC_MESSAGES/django.po b/evibes/locale/en_US/LC_MESSAGES/django.po index 3d4a525f..307f0d88 100644 --- a/evibes/locale/en_US/LC_MESSAGES/django.po +++ b/evibes/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Name of the project" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Name of the company" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Phone number of the company" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!DO NOT CHANGE!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Use TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP username" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP password" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "The address of the emails sender" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "How many days we store messages from anonymous users" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "How many days we store messages from authenticated users" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstract API Key" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "General Options" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Legal Options" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO Options" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Debugging Options" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,53 +183,36 @@ msgstr "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks.\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -259,18 +229,54 @@ msgstr "" "## Version\n" "Current API version: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Storefront" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Dashboard" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Health" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Config" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Users" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Groups" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Products" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Categories" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Brands" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Periodic Tasks" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Support" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.mo b/evibes/locale/es_ES/LC_MESSAGES/django.mo index 0908dfb6e1507aaa8bd38f9a2170eee895220129..b6f036b2848670ab437855caa75a712a3bc5923e 100644 GIT binary patch delta 1634 zcmZ9LO>9*~6vu~(Xwg!wlq$4zszs!QQk1Ac!2k_5v86SyO*EuQr|(VMTi?5LnYkBR zjJ_DZVqD3^xOA&A7-Kc@V_~Gal9(7bZfs24xDZ^RiBT8+&h4ujPTsk{J9B5w$A9L% za`ehjeYI`l8w%^kJMnabQV+pPO+2uVuT$#OW~DxXw=r(tqSP&L58MV1!F%B2uos?% z&G0R_3BCi_uHJ8qKWluy2ya!Yt}gL%2MbnV3;YAN!%eMgi8`SK+6N`j!N&Lzc#!c4 z_#k`+%Ki_b6nGJCgx^6a{Ch}f^$YBVe--1pQaf0^gNZ(PBRm0bf@4rRIRz!KZHz-> z{4DHY{xx_5ywLdm5u9ZFd1JnvHsyO4ydLg?Q>fez|E`ni)wZ>YU*5S^>6`F&7QPDy z;FoYOyb7ftP5GioACy85KvCu}B&QmN9q>u0;c3WEo#P>megH-BZ(v;l{mhF5_!UZp zf5O91b`OCgPy)XI2jO`r>%M|p;nz?k{t?Pu_zlvN>grMIPB;jq@DjWkPBq30J)FM; zPMMHSUV?I|UWanFZ$nA+1C#(i!6|qdN}$JxE_?#Y(OI|wirg$IjtvwsrBE@+BWq=! z+`po8sroLwOXe_*OGk2n5TlS&E~S`Aw+9#HI1$AkL+!%XO*$5n#^l0@?Z$g?X@X-f zjzJphe3(ZQ-j82vT+qV$c;1c6oe){KIm5YUiAfEUzw}jpo#l3G*|~_)31crQG3NmIO6CF)^;ky<1#T z!`4*O`8?j@9vHE6rmDx1G;(oJqb92AS+Z(Z%&1WtXX>P>S?y*umFTjoB_>|V+glIZ zYklM@QCUxz@KjLa^DeeJ&T2E(U$a_~wvv_8kWaTx*Rv#XK2@@-sFAlt?dd^Bv0li0 z6bLHyNR%a)`Sqj&dc>MDRuAf^_@FB;-ks{FO`Ph~Y1As)5Oiu5Z5U9K!Rk_Jq~OFz zN$9E4FJEcB+H(JYB90ngHvfvaazWk;6*F(VI-Z$|ce-MA4XyLlu5%ra`V9G{r^O{L zs;ZKyW|jQ>&KFz9k}`$cpsS**&9`;mw;c^vK2;}OZN^&(R5jYx5^saaPj??_n=sy* zpcB+wS*CLn^7p!Xn;Vk3kbm3#eEsNBRx$sVEJ~b?YSa;>(HW<0EMeEhD-$V}R3TeW yHK2#=f=Cx49ZNsKnucP=>#7S9EwdqYB3&9)qqEEx`Z36#)6LD3Av2tKQ2zi6PCRe` delta 1102 zcmY+?F-#Lt9LMn|ASwz4RK!-`ff^e@g~WjnB_V+b1SzrA=z!$f9#ZV}E_X+yEHzOy zE;5{qCJycnFu6EuoN!f%iHpH78ZjpN{T~(eC9j|N+TMG=_kXuJ_;8@~v9W4d(K_hI z=v}*%I)@i3_@I5q*&3y`@F4SSty1+kk4^XpZwCLklIqo$`FKJYT|g z_E%3CNPt(k2j8GPxK^IOFZ&rMsm@pY$qu6&Q-WP;*$#Fco0;eFEG}XfuHq5=gc`R{ z0!Ld3%>Js6ft2bRHll+P=pI(%W4wsVIEe4C8=G0>5RRZ!=4M$JC!6ca(_}n3DHjf)3}MSM!+)xA!!or!t^FBOXKc$c3dR4v zW4Bp$3pOG>L1%p|NYqbt`nGGbM!{FfImfYGU!@H1cG@=Fth(x%I++{`O^qd2PB(n3 z4Q{k8ok%ztl9`^qwH?*;RG3doR5en_@pJI2?SAk?_r%9-EA5&(YwEnAP0Mjj&rmyG p=A{NjQrW?}?hm@#j|Y?OccVjI#&8VR@J%&PoXZ-2Qw5_PvEMsouKxf4 diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.po b/evibes/locale/es_ES/LC_MESSAGES/django.po index 14613fd7..15bd1d78 100644 --- a/evibes/locale/es_ES/LC_MESSAGES/django.po +++ b/evibes/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Nombre del proyecto" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Nombre de la empresa" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Número de teléfono de la empresa" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Tipo impositivo en la jurisdicción de su empresa. Deje 0 si no desea " +"procesar los impuestos." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Clave API de tipo de cambio" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NO CAMBIES!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Puerto SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Utilizar TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Utilizar SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Nombre de usuario SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Contraseña SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Dirección del remitente del correo electrónico" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Cuántos días almacenamos los mensajes de usuarios anónimos" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Cuántos días almacenamos los mensajes de los usuarios autenticados" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Desactivar la función de compra" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de la API Nominatim de OpenStreetMap" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Clave API de OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Clave API abstracta" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Una entidad para almacenar datos publicitarios" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Una entidad para almacenar datos analíticos" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Guardar las respuestas de las API de los proveedores" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Opciones generales" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Opciones legales" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Opciones de correo electrónico" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Características Opciones" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Opciones SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Opciones de depuración" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,59 +183,38 @@ msgstr "" "\n" "Bienvenido a la documentación de eVibes.\n" "\n" -"eVibes es una potente plataforma de comercio electrónico que le permite " -"lanzar y gestionar una tienda en línea de cualquier tipo en tan sólo unos " -"clics.\n" +"eVibes es una potente plataforma de comercio electrónico que le permite lanzar y gestionar una tienda en línea de cualquier tipo en tan sólo unos clics.\n" "\n" "## Características principales\n" -"- **Catálogo de productos:** Gestione los detalles de los productos, " -"precios, inventario y disponibilidad en múltiples categorías.\n" -"- **Gestión de Pedidos:** Procesar pedidos, seguimiento de cumplimiento, y " -"manejar las solicitudes de los clientes de manera eficiente.\n" -"- Autenticación y autorización:Autenticación de usuario integral con tokens " -"JWT y permisos basados en roles.\n" -"- **Procesamiento de pagos:** Integre múltiples pasarelas de pago y gestione " -"las transacciones de forma segura.\n" -"- **Blog y gestión de contenidos:** Crear y gestionar entradas de blog y " -"contenido de marketing para su tienda.\n" -"- **Operaciones B2B:** Puntos finales dedicados para transacciones de " -"empresa a empresa y gestión de ventas al por mayor.\n" -"- Soporte multilingüe:** Sirve a clientes de todo el mundo con capacidades " -"de internacionalización completa (i18n).\n" -"- Integraciones personalizadas:** Arquitectura API extensible para la " -"integración con plataformas y servicios externos.\n" -"- Análisis e informes:** Generación de informes detallados sobre ventas, " -"inventario y comportamiento de los clientes.\n" -"- Actualizaciones en tiempo real:** Obtenga datos en tiempo real sobre los " -"niveles de inventario, el estado de los pedidos y los cambios de precios.\n" +"- **Catálogo de productos:** Gestione los detalles de los productos, precios, inventario y disponibilidad en múltiples categorías.\n" +"- **Gestión de Pedidos:** Procesar pedidos, seguimiento de cumplimiento, y manejar las solicitudes de los clientes de manera eficiente.\n" +"- Autenticación y autorización:Autenticación de usuario integral con tokens JWT y permisos basados en roles.\n" +"- **Procesamiento de pagos:** Integre múltiples pasarelas de pago y gestione las transacciones de forma segura.\n" +"- **Blog y gestión de contenidos:** Crear y gestionar entradas de blog y contenido de marketing para su tienda.\n" +"- **Operaciones B2B:** Puntos finales dedicados para transacciones de empresa a empresa y gestión de ventas al por mayor.\n" +"- Soporte multilingüe:** Sirve a clientes de todo el mundo con capacidades de internacionalización completa (i18n).\n" +"- Integraciones personalizadas:** Arquitectura API extensible para la integración con plataformas y servicios externos.\n" +"- Análisis e informes:** Generación de informes detallados sobre ventas, inventario y comportamiento de los clientes.\n" +"- Actualizaciones en tiempo real:** Obtenga datos en tiempo real sobre los niveles de inventario, el estado de los pedidos y los cambios de precios.\n" "\n" "## API disponibles\n" "- API REST:** Interfaz RESTful completa (esta documentación)\n" -"- API GraphQL:** Disponible en `/graphql/` con interfaz GraphiQL para " -"consultas interactivas\n" +"- API GraphQL:** Disponible en `/graphql/` con interfaz GraphiQL para consultas interactivas\n" "\n" "## Autenticación\n" -"- La autenticación se gestiona mediante tokens JWT. Incluya el token en la " -"cabecera `X-EVIBES-AUTH` de sus peticiones con el formato `Bearer " -"`.\n" +"- La autenticación se gestiona mediante tokens JWT. Incluya el token en la cabecera `X-EVIBES-AUTH` de sus peticiones con el formato `Bearer `.\n" "- La duración del token de acceso es {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- La duración del token de actualización es de {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} horas.\n" -"- Los tokens de actualización se rotan automáticamente y se invalidan " -"después de su uso para mejorar la seguridad.\n" +"- Los tokens de actualización se rotan automáticamente y se invalidan después de su uso para mejorar la seguridad.\n" "\n" "## Internacionalización (i18n)\n" -"- Establezca la cabecera `Accept-Language` para especificar su idioma " -"preferido (por ejemplo, `Accept-Language: en-US`).\n" -"- Los idiomas disponibles pueden recuperarse desde el punto final `/app/" -"languages/`.\n" -"- Todos los contenidos orientados al usuario son compatibles con varios " -"idiomas.\n" +"- Establezca la cabecera `Accept-Language` para especificar su idioma preferido (por ejemplo, `Accept-Language: en-US`).\n" +"- Los idiomas disponibles pueden recuperarse desde el punto final `/app/languages/`.\n" +"- Todos los contenidos orientados al usuario son compatibles con varios idiomas.\n" "\n" "## Formatos de respuesta\n" "La API admite varios formatos de respuesta:\n" @@ -263,18 +229,54 @@ msgstr "" "## Versión\n" "Versión actual de la API: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Inicio" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menú" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Escaparate" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Cuadro de mandos" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Salud" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Configurar" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Usuarios" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grupos" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Productos" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Categorías" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Marcas" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Tareas periódicas" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Ayuda" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index 59e46c94..70d0f492 100644 --- a/evibes/locale/fa_IR/LC_MESSAGES/django.po +++ b/evibes/locale/fa_IR/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-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,10 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "" @@ -33,102 +29,108 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:55 -msgid "General Options" +#: evibes/settings/constance.py:56 +msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" @@ -191,24 +193,60 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/jazzmin.py:20 -msgid "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" msgstr "" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" msgstr "" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.mo b/evibes/locale/fr_FR/LC_MESSAGES/django.mo index 0515094bbff620ed6b6f44892525c71d680e8cd1..a0d0a3d05a6f441fbfe6d3913ea08e56b855d1b3 100644 GIT binary patch delta 1654 zcmZ9KTWDNG7{{k+tu?xd#%!-?Gp*Kb8{66%t5iW~rR~F}iR|XZDrT~0l09{E=6L3u zHmQ_-5^o5~BItt%J{d1idI3dBG4Zi)f(T+?M11k`Bno};_nkeV+JW!<=5pqn|M#DH z_2`?&+cyT*yr*a*#1N6LQtC-~y@wC&%hgJq>Q(A1ct7KEpHlb2-EciT40pk2;e+rT zybFE=*TO}}c6Ff`e_gCE!TXeItLt<&@xu*Rg8#rWT-)D0Xb4K8y-*U37UQSkDC1-B z3HS<>{g#rhRE$@p3^U#3i1-wN-5JK+nsJOV#&-=owU1Ko-bA&ai6!VU06_$WLJ z55Ui$2>J<1!e5~X{S%5qHz7r-9<9_M9DonO3KXFyA-|{?isSFVwj}zLj#zsUN}{V! zD)<&Y2RE}@gk?}He;taoSD{$D1jX9#p}c`#pa|&Q(G@TZb7$dZ=EtF&cX|i+j|(be zLMnR=%A6?d- zwA^g$eCpMa#6*EtM@?#HT@qTlE}98v)icI7r=3ZH&hMqhhQwvDS10QA2|bax`2}^t znpWEEM1Ah@s+~10Jszi_i@X{$VN1_&s&@H|8naQRPMSHZ-Hb+wZn(MFL<^mA|AB)x z30)92blv!uyqajb$m%GYo3_bqe=Cj+vPSAVQ~guzERJ20D%q85q&Ke z=Z7y26h`J{1fk^Zl=PvET^q5LOs$HI(!|EpX*+>_Y_PukaieLyj+Ym6L-Sql>s{+| z*Fs#orr&PYT$YA5!mJfdRNCFiTsE(RN;t=}2y^EG6M5Y-g^sS9oPEY|vc7dbj+)SW udk#;1$a3a2m*`#AG-1kgY&a#MU*b|*i0qo%aog9ICeyGLdhRX5*M9+7D@5o3 delta 1089 zcmY+?O-K}B7{KwzkFuHcoHgt z4nt6fqC*#4&L`ACR3 ztDSYMOymTfFXxBY#B{aDA3VVIOhlv>7qAKMVJ|+%L--!+a06RVYDCydD>h;;>hl*c zDzYRAHoRY^uoBaF8eJT~7pM<>LoHwJk0KCGB*RjhqYO-H($wTGoq!P4$@v|21Vw}X?AgREWQKMb<;4QX*2+O;;K zp$+~Y`b|l7@pVPCy4mzjTLmX|+?x02Ox|;SJLTImM}qavj$kA5D)?A4-D&4+&&rrY z-gn$wL57maF*D}53yU)3X6@ikv?s_!hX$@#PR7i7Zq~S^J7v_$+QywV{+w-6ZZ>b_ z7I*wdx-{v6^=N<4SKAgOYNz^q*Ry#?&X@7|eBSkZNm_+l)2`*s$V9<5\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Nom du projet" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Nom de l'entreprise" @@ -30,157 +26,148 @@ msgid "Phone number of the company" msgstr "Numéro de téléphone de l'entreprise" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Taux d'imposition dans la juridiction de votre entreprise. Laissez 0 si vous" +" ne souhaitez pas traiter les taxes." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Clé API pour le taux de change" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NE PAS CHANGER !!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Hôte SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Utiliser TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Nom d'utilisateur SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Mot de passe SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "L'adresse de l'expéditeur du courrier électronique" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "" "Pendant combien de jours les messages des utilisateurs anonymes sont-ils " "conservés ?" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "" -"Pendant combien de jours les messages des utilisateurs authentifiés sont-ils " -"conservés ?" +"Pendant combien de jours les messages des utilisateurs authentifiés sont-ils" +" conservés ?" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Désactiver la fonctionnalité d'achat" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de l'API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Clé API abstraite" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Une entité pour stocker des données publicitaires" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Une entité pour stocker des données analytiques" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Sauvegarder les réponses des API des fournisseurs" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Options générales" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Options juridiques" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Options de courrier électronique" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Caractéristiques Options" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Options de référencement" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Options de débogage" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -192,7 +179,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -200,85 +187,100 @@ msgstr "" "\n" "Bienvenue dans la documentation d'eVibes.\n" "\n" -"eVibes est une puissante plateforme de commerce électronique qui vous permet " -"de lancer et de gérer une boutique en ligne de tout type en quelques clics.\n" +"eVibes est une puissante plateforme de commerce électronique qui vous permet de lancer et de gérer une boutique en ligne de tout type en quelques clics.\n" "\n" "## Fonctionnalités principales\n" -"- Catalogue de produits:** Gérer les détails des produits, les prix, " -"l'inventaire et la disponibilité à travers plusieurs catégories.\n" -"- Gestion des commandes:** Traiter les commandes, suivre l'exécution et " -"traiter les demandes des clients de manière efficace.\n" -"- Authentification et autorisation:** Authentification complète des " -"utilisateurs avec des jetons JWT et des autorisations basées sur les rôles.\n" -"- Traitement des paiements:** Intégration de plusieurs passerelles de " -"paiement et gestion sécurisée des transactions.\n" -"- Gestion de blog et de contenu:** Créez et gérez des articles de blog et du " -"contenu marketing pour votre boutique.\n" -"- Opérations B2B:** Points d'accès dédiés aux transactions interentreprises " -"et à la gestion des ventes en gros.\n" -"- Support multilingue:** Servez vos clients dans le monde entier grâce à des " -"capacités d'internationalisation complètes (i18n).\n" -"- Intégrations personnalisées:** Architecture API extensible pour " -"l'intégration avec des plates-formes et des services externes.\n" -"- Analyses et rapports:** Générer des rapports détaillés sur les ventes, les " -"stocks et le comportement des clients.\n" -"- Mises à jour en temps réel:** Obtenez des données en direct sur les " -"niveaux de stock, les statuts des commandes et les changements de prix.\n" +"- Catalogue de produits:** Gérer les détails des produits, les prix, l'inventaire et la disponibilité à travers plusieurs catégories.\n" +"- Gestion des commandes:** Traiter les commandes, suivre l'exécution et traiter les demandes des clients de manière efficace.\n" +"- Authentification et autorisation:** Authentification complète des utilisateurs avec des jetons JWT et des autorisations basées sur les rôles.\n" +"- Traitement des paiements:** Intégration de plusieurs passerelles de paiement et gestion sécurisée des transactions.\n" +"- Gestion de blog et de contenu:** Créez et gérez des articles de blog et du contenu marketing pour votre boutique.\n" +"- Opérations B2B:** Points d'accès dédiés aux transactions interentreprises et à la gestion des ventes en gros.\n" +"- Support multilingue:** Servez vos clients dans le monde entier grâce à des capacités d'internationalisation complètes (i18n).\n" +"- Intégrations personnalisées:** Architecture API extensible pour l'intégration avec des plates-formes et des services externes.\n" +"- Analyses et rapports:** Générer des rapports détaillés sur les ventes, les stocks et le comportement des clients.\n" +"- Mises à jour en temps réel:** Obtenez des données en direct sur les niveaux de stock, les statuts des commandes et les changements de prix.\n" "\n" "## API disponibles\n" "- API REST:** Interface RESTful complète (cette documentation)\n" -"- API GraphQL:** Disponible sur `/graphql/` avec l'interface GraphiQL pour " -"les requêtes interactives.\n" +"- API GraphQL:** Disponible sur `/graphql/` avec l'interface GraphiQL pour les requêtes interactives.\n" "\n" "## Authentification\n" -"- L'authentification est gérée par des jetons JWT. Incluez le jeton dans " -"l'en-tête `X-EVIBES-AUTH` de vos requêtes au format `Bearer `.\n" +"- L'authentification est gérée par des jetons JWT. Incluez le jeton dans l'en-tête `X-EVIBES-AUTH` de vos requêtes au format `Bearer `.\n" "- La durée de vie du jeton d'accès est de {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- La durée de vie du jeton de rafraîchissement est de {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} heures.\n" -"- Les jetons de rafraîchissement font l'objet d'une rotation automatique et " -"sont invalidés après utilisation pour une meilleure sécurité.\n" +"- Les jetons de rafraîchissement font l'objet d'une rotation automatique et sont invalidés après utilisation pour une meilleure sécurité.\n" "\n" "## Internationalisation (i18n)\n" -"- Définissez l'en-tête `Accept-Language` pour spécifier votre langue " -"préférée (par exemple, `Accept-Language : en-US`).\n" -"- Les langues disponibles peuvent être récupérées à partir du point de " -"terminaison `/app/languages/`.\n" -"- Tous les contenus destinés à l'utilisateur supportent d'emblée plusieurs " -"langues.\n" +"- Définissez l'en-tête `Accept-Language` pour spécifier votre langue préférée (par exemple, `Accept-Language : en-US`).\n" +"- Les langues disponibles peuvent être récupérées à partir du point de terminaison `/app/languages/`.\n" +"- Tous les contenus destinés à l'utilisateur supportent d'emblée plusieurs langues.\n" "\n" "## Formats de réponse\n" "L'API prend en charge plusieurs formats de réponse :\n" "- **JSON** (par défaut, formaté en camelCase)\n" "- **XML** (ajoutez `?format=xml` ou définissez `Accept : application/xml`)\n" -"- **YAML** (ajouter `?format=yaml` ou définir `Accept : application/x-" -"yaml`)\n" +"- **YAML** (ajouter `?format=yaml` ou définir `Accept : application/x-yaml`)\n" "\n" "## Santé et surveillance\n" "- Contrôles de santé : `/health/`\n" -"- Métriques Prometheus (protégées par l'authentification de base) : `/" -"prometheus/`\n" +"- Métriques Prometheus (protégées par l'authentification de base) : `/prometheus/`\n" "\n" "## Version\n" "Version actuelle de l'API : {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Accueil" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Vitrine" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Tableau de bord" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Santé" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Config" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Utilisateurs" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Groupes" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produits" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Catégories" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Marques" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Tâches périodiques" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Tableau des tâches" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Soutien" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.mo b/evibes/locale/he_IL/LC_MESSAGES/django.mo index 45557c2f7cffd104c6e3f65e09278051df58b560..7770c980d828d13aab1a8c0d7df054ed2ce25767 100644 GIT binary patch delta 1704 zcmZ9KO>7la6o3zQa1&O;zhNC*lUYer4>iypsDbvE{qR19*Z$Z%t?}0~Q6+8j;Pr9K7cFS^9mPcSC z`uE`7@Z+-mb9f5*o3g%+-&Ffnco*CbU#82u;MpRP-(4rN5kr+(VKdYY9E3WSlVy%T zy;p+w!6irz`3`DleuC=vJA4>wb#0&pZiX*G9nl%M6@Cbd8t57aijgI#@-pm#Kf@0A zc+*PD-iD7M&p}Q2BczM+D|`^%f|{_Vc_qO!a6580)VOD1EqotpM?Y$2{u_xDRTezy?qg`t;C_EazJK0FZg z<%1}WGl4D(69i}4;hKA*s z>kP#GiC+^u+3xl^1Lj0N_5weWe+!oU23fVYHdNMu5LOvgav8b1=k<*X~`3K|q z=9NO|MFiD)G|F&L2yZ8CGwrVPnrj|0o;8?U;J3u)b;plQ92mNlb)(3{&X60m$*IUS zot^ELUG1I9kSfEge`Q88$xQ8rLy}%h$J531TsoOfOFExUa2!t;5K#-3IV+AydV#}v z!~OFd#?u+~NW6wGTIbUbko6u8v-pk^=W;q}wB3SHqm8OLDVZb5gvo6i-UOI~bj-(2FRt=v%JJh5k?jg?F_?x<4JoXtC( zeB1a=($UmVRF^C07c|zz^s*t`qWu{gUCpzYCk**6{4bxC)2TL9mH3YZnh$Uq#bqX) m(&{y^c4RWWWa!itVkfGn4e4~7;F_FiYRsT1kyO9h@BaY4)w&4) delta 1112 zcmY+?J4{ni7{KvUz!wSyROF#}S_-0|#K=Gl!3l!~DM`y>qIiKzptikDTOzm=2L>m^ z3qiso3?xVg7o3cVGHRF{yo17E*fdNI8Xf$9<;LhChu`^b&+|Ly%Z;ZUnVqtNSw-u6A$w8HzWvNx!wTXM%0f}B!v#Enn<$z1 zh%#;$Gt&6(b|~NxG!a+gVZ4r#nIKB)Z=-B1?mB@UV#pP_4p~V0YHIFKC`HD}TvE!Y z^454C8I?yv?u{hm?oCoCrus&L~~zPB)-8~TmZ$iPKoG(D^nNh@s*q|L$eSM|MSqL`T;Hb?E9qD_0NxWC4X zn@J<8gNgKr6;G+oaJWbJB(1S=)k#()2GDf0$h|${0^;F$P%+%J9W->is z#S%t*{J(Fk6k%QatM{_qSW;~VOZpnqR?=jScv^)<6A3GsR$(J`zuz*FgQ_=W>QJaF zXSgf0aiMg=YkPbzE1o#3&bss5nRVu=S?w%1i~P;ouYFaXd3)QJwb%SD{&iW*A\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "שם הפרויקט" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "שם החברה" @@ -30,153 +26,143 @@ msgid "Phone number of the company" msgstr "מספר הטלפון של החברה" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"שיעור המס בתחום השיפוט של החברה שלך. השאר 0 אם אינך מעוניין לעבד מסים." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "מפתח API לשער החליפין" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!אין לשנות!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "מארח SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "יציאת SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "השתמש ב-TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "השתמש ב-SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "שם משתמש SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "סיסמת SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "כתובת השולח של הודעות הדוא\"ל" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "כמה ימים אנו שומרים הודעות ממשתמשים אנונימיים" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "כמה ימים אנו שומרים הודעות ממשתמשים מאומתים" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "השבת פונקציונליות הרכישה" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "כתובת ה-API של OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "מפתח API של OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "מפתח API מופשט" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "פרוקסי HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "ישות לאחסון נתוני פרסום" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "ישות לאחסון נתוני ניתוח" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "שמור תגובות מ-API של ספקים" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "אפשרויות כלליות" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "אפשרויות משפטיות" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "אפשרויות דוא\"ל" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "אפשרויות תכונות" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "אפשרויות SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "אפשרויות ניפוי באגים" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,61 +174,73 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" msgstr "" "\n" -"ברוכים הבאים לתיעוד של eVibes. eVibes היא פלטפורמת מסחר אלקטרוני עוצמתית " -"המאפשרת להקים ולנהל חנות מקוונת מכל סוג בכמה לחיצות בלבד. ## תכונות עיקריות " -"- **קטלוג מוצרים:** ניהול פרטי מוצרים, מחירים, מלאי וזמינות בקטגוריות " -"מרובות. - **ניהול הזמנות:** עיבוד הזמנות, מעקב אחר ביצוען וטיפול יעיל בבקשות " -"לקוחות.\n" -"- **אימות ואישור:** אימות משתמשים מקיף באמצעות אסימוני JWT והרשאות מבוססות " -"תפקידים. - **עיבוד תשלומים:** שלבו מספר שערי תשלום ונהלו עסקאות בצורה " -"מאובטחת. - **ניהול בלוג ותוכן:** צרו ונהלו פוסטים בבלוג ותוכן שיווקי לחנות " -"שלכם. - **פעולות B2B:** נקודות קצה ייעודיות לעסקאות בין עסקים וניהול " -"סיטונאי.\n" -"- **תמיכה בריבוי שפות:** שירות ללקוחות ברחבי העולם עם יכולות בינלאומיות " -"מלאות (i18n). - **אינטגרציות מותאמות אישית:** ארכיטקטורת API ניתנת להרחבה " -"לשילוב עם פלטפורמות ושירותים חיצוניים. - **ניתוחים ודיווחים:** יצירת דוחות " -"מפורטים על מכירות, מלאי והתנהגות לקוחות. - **עדכונים בזמן אמת:** קבלת נתונים " -"בזמן אמת על רמות המלאי, סטטוס ההזמנות ושינויים במחירים.\n" +"ברוכים הבאים לתיעוד של eVibes. eVibes היא פלטפורמת מסחר אלקטרוני עוצמתית המאפשרת להקים ולנהל חנות מקוונת מכל סוג בכמה לחיצות בלבד. ## תכונות עיקריות - **קטלוג מוצרים:** ניהול פרטי מוצרים, מחירים, מלאי וזמינות בקטגוריות מרובות. - **ניהול הזמנות:** עיבוד הזמנות, מעקב אחר ביצוען וטיפול יעיל בבקשות לקוחות.\n" +"- **אימות ואישור:** אימות משתמשים מקיף באמצעות אסימוני JWT והרשאות מבוססות תפקידים. - **עיבוד תשלומים:** שלבו מספר שערי תשלום ונהלו עסקאות בצורה מאובטחת. - **ניהול בלוג ותוכן:** צרו ונהלו פוסטים בבלוג ותוכן שיווקי לחנות שלכם. - **פעולות B2B:** נקודות קצה ייעודיות לעסקאות בין עסקים וניהול סיטונאי.\n" +"- **תמיכה בריבוי שפות:** שירות ללקוחות ברחבי העולם עם יכולות בינלאומיות מלאות (i18n). - **אינטגרציות מותאמות אישית:** ארכיטקטורת API ניתנת להרחבה לשילוב עם פלטפורמות ושירותים חיצוניים. - **ניתוחים ודיווחים:** יצירת דוחות מפורטים על מכירות, מלאי והתנהגות לקוחות. - **עדכונים בזמן אמת:** קבלת נתונים בזמן אמת על רמות המלאי, סטטוס ההזמנות ושינויים במחירים.\n" "\n" -"## ממשקי API זמינים - **REST API:** ממשק RESTful מלא (תיעוד זה) - **GraphQL " -"API:** זמין ב-`/graphql/` עם ממשק GraphiQL לשאילתות אינטראקטיביות ## אימות - " -"האימות מתבצע באמצעות אסימוני JWT. כלול את האסימון בכותרת `X-EVIBES-AUTH` של " -"בקשותיך בפורמט `Bearer `.\n" +"## ממשקי API זמינים - **REST API:** ממשק RESTful מלא (תיעוד זה) - **GraphQL API:** זמין ב-`/graphql/` עם ממשק GraphiQL לשאילתות אינטראקטיביות ## אימות - האימות מתבצע באמצעות אסימוני JWT. כלול את האסימון בכותרת `X-EVIBES-AUTH` של בקשותיך בפורמט `Bearer `.\n" "- אורך חיי אסימון הגישה הוא {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}. - אורך חיי אסימון הרענון הוא {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" -"} שעות. - אסימוני הרענון מסתובבים באופן אוטומטי ומבוטלים לאחר השימוש לשם " -"אבטחה משופרת. ## בינלאומיות (i18n) - הגדר את הכותרת `Accept-Language` כדי " -"לציין את השפה המועדפת עליך (לדוגמה, `Accept-Language: en-US`).\n" -"- ניתן לאחזר את השפות הזמינות מנקודת הקצה `/app/languages/`. - כל התוכן " -"המוצג למשתמש תומך במספר שפות באופן מובנה. ## פורמטים של תגובה ה-API תומך " -"במספר פורמטים של תגובה: - **JSON** (ברירת מחדל, בפורמט camelCase) - **XML** " -"(הוסף `?format=xml` או הגדר `Accept: application/xml`)\n" -"- **YAML** (הוסף `?format=yaml` או הגדר `Accept: application/x-yaml`) ## " -"תקינות וניטור - בדיקות תקינות: `/health/` - מדדי Prometheus (מוגנים באמצעות " -"אימות בסיסי): `/prometheus/` ## גרסה גרסת ה-API הנוכחית: {EVIBES_VERSION}\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} שעות. - אסימוני הרענון מסתובבים באופן אוטומטי ומבוטלים לאחר השימוש לשם אבטחה משופרת. ## בינלאומיות (i18n) - הגדר את הכותרת `Accept-Language` כדי לציין את השפה המועדפת עליך (לדוגמה, `Accept-Language: en-US`).\n" +"- ניתן לאחזר את השפות הזמינות מנקודת הקצה `/app/languages/`. - כל התוכן המוצג למשתמש תומך במספר שפות באופן מובנה. ## פורמטים של תגובה ה-API תומך במספר פורמטים של תגובה: - **JSON** (ברירת מחדל, בפורמט camelCase) - **XML** (הוסף `?format=xml` או הגדר `Accept: application/xml`)\n" +"- **YAML** (הוסף `?format=yaml` או הגדר `Accept: application/x-yaml`) ## תקינות וניטור - בדיקות תקינות: `/health/` - מדדי Prometheus (מוגנים באמצעות אימות בסיסי): `/prometheus/` ## גרסה גרסת ה-API הנוכחית: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "בית" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "תפריט" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "חנות" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "לוח מחוונים" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "בריאות" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "תצורה" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "משתמשים" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "קבוצות" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "מוצרים" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "קטגוריות" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "מותגים" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "פוסטים בבלוג" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "משימות תקופתיות" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "לוח משימות" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "תמיכה" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index 7e2d849a..94d6de17 100644 --- a/evibes/locale/hi_IN/LC_MESSAGES/django.po +++ b/evibes/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,10 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "" @@ -33,102 +29,108 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:55 -msgid "General Options" +#: evibes/settings/constance.py:56 +msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" @@ -191,24 +193,60 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/jazzmin.py:20 -msgid "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" msgstr "" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" msgstr "" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index 59e46c94..70d0f492 100644 --- a/evibes/locale/hr_HR/LC_MESSAGES/django.po +++ b/evibes/locale/hr_HR/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-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,10 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "" @@ -33,102 +29,108 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:55 -msgid "General Options" +#: evibes/settings/constance.py:56 +msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" @@ -191,24 +193,60 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/jazzmin.py:20 -msgid "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" msgstr "" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" msgstr "" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.mo b/evibes/locale/id_ID/LC_MESSAGES/django.mo index bc3667afcfb594cc181fb8ef6f8b82cd041c4b95..b7d776ae172e040c46e71246d98c9f893c1d0c98 100644 GIT binary patch delta 1641 zcmZ9LU1(fI6vxL}qt>L++HGx`O-Jo_+N3QFmZ(V5l17r6m86IiLngbE-J9L}!OXpy zD6%hoQ6Cq5@TE_EP%K!gqKIF8=u-tj5Pd1)a}_}pQ4oLU?zKV>JNGwdKF*x;pV^2H+&i1 z3opPP_zq;ddcW{LE#|Mn2b5~7>vVRo;0El2f5H;%>F*vi2qn;AD1nX_{!{Qc{uDd` zUxBj!11Jezg&X0wP!j(h5?bAayWros-&SfTt9LSR5Z(i);C*loN+su@1h$3m3;$L4 zFyn8)yWyo`{zG^c|BGV0M42*QhIhd|@C8&JhP`c0dTmR$;Pw}=}3Tgp;Y`49D`rN z3HS$;04LB*0-S`h?|F!dY7tVbiXcDL<|B$-fDge-P!hWaCE>53ob%l-?q34@SPc9M z5kvh2ABBCoyWuF51jpeboGSc_1usJh{24^qTyCjck`R-Jx;5{0mbhq#}e-{4w(D0lCSQiHRa|4PyIfyJ=E2*Pg#Oc?*M2 z@R5JoFzt2|WyB8B_R>U3QD=ab+m+upY~55E*Gr>`i$j|>Z01Ly3#y&NeP11#Y{m5? z_NiBs&O|k@PMXx#V;5MuakLWD)hXi}%dv5_&d+_-?Jmv|ucj9kD!St0wRJUZO)G75 zqRsJRv$k$pdM-(WIP&U@30iuEQ+1q=s53Uo)H5cuI$qIaqN{P3m}tFI>OXqSx*)Cv zRlQ(*)2m7&j;xNdaM`-sRx6IJW!2Pomim|4S(3yqRkAD3k=~ki)S!b%uVyar1eJUw z%6go+{|+6|v(~(5^${K96S@{h`%?XqiBg@$8nvp{d!3p!>qpdCZ}t5AY|e$*d7&dq zcjcG&X=Dan@eOaYi6OEXqnKYIpeTQAL9P6e_E3l@7{F*GMonr$tOhKxB`y+t&_halcg^*x)TNUH zaWLlMXyV|?gf0#e7ZZsr4h}{c)Wv9UaM4M>zveLdlGo3BFZb^Er}r}c@oZ(IweEpp z9Aq9~4s26u5YN=`!}y5{4NCpOJ?t~hN`-L|Be;Zp_y~LO6}I3ewximu6id~C`>+q? z{y7XORZ&S6ykAXY9WLMrbZ`V8qg?oalE7wQ4YygU2*$7%J8={nQR6POP!hNm?C%8o zd)Q5U^^k=mu!{A#hH~*uuzw%;8K>yZH*6xpCCZeFuF^KC*b1zmbn`y;;uDla-(fd? zL5bJc#eL$d2n#tFKnZ*brGhw0LgRQ6Cozt9Q39_cxu{Pl&;LN_)NhoIgriEe;Slb` zizx5Ef^zQ~R^%Yhq7`rAAzVTUyo_@3DN2Cnfop+pk%m;Og=&?1QT`@_NgjWPbV!Pn zA+czJd><7h-zSD&r;Y1_>@3rpH%tCT^9%p=?wP1* zo373q$%2=4?4nAf(-X#o>nxU4f=B(^p~HSYlo%P;*}O5wZNsTPsV-~FG@Lnuml?B; zRnT_%zcV5&5ZC`28ut6coqjSr-S0WB$vbRMrAmc@<9aHsi@6y`yBRfEG>uehtZI5J zwQ{uOdy}7tPIV;<#jG)Dl`KVCIo6V*I#1SiM*FML@^Cz_E$tZv)4q{)vzB36BrC~i z&fHQ_&ueW5d)FzOIp2yM_m^Ys{(3A^KkDhcE}H(35ox\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Nama proyek" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Nama perusahaan" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Nomor telepon perusahaan" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Tarif pajak dalam yurisdiksi perusahaan Anda. Biarkan 0 jika Anda tidak " +"ingin memproses pajak." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Kunci API nilai tukar" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! JANGAN BERUBAH!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Gunakan TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Gunakan SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Nama pengguna SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Kata sandi SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Alamat pengirim email" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Berapa hari kami menyimpan pesan dari pengguna anonim" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Berapa hari kami menyimpan pesan dari pengguna yang diautentikasi" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Menonaktifkan fungsionalitas beli" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Kunci API OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Kunci API Abstrak" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Proksi HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Entitas untuk menyimpan data iklan" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Entitas untuk menyimpan data analitik" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Menyimpan tanggapan dari API vendor" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Opsi Umum" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Opsi Hukum" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Opsi Email" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Opsi Fitur" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Opsi SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Opsi Debugging" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,64 +183,44 @@ msgstr "" "\n" "Selamat datang di dokumentasi eVibes.\n" "\n" -"eVibes adalah platform e-commerce yang kuat yang memungkinkan Anda untuk " -"meluncurkan dan mengelola toko online dalam bentuk apa pun hanya dengan " -"beberapa klik.\n" +"eVibes adalah platform e-commerce yang kuat yang memungkinkan Anda untuk meluncurkan dan mengelola toko online dalam bentuk apa pun hanya dengan beberapa klik.\n" "\n" "## Fitur Utama\n" -"- Katalog Produk:** Kelola detail produk, harga, inventaris, dan " -"ketersediaan di berbagai kategori.\n" -"- Manajemen Pesanan:** Memproses pesanan, melacak pemenuhan pesanan, dan " -"menangani permintaan pelanggan secara efisien.\n" -"- Autentikasi & Otorisasi:** Autentikasi pengguna yang komprehensif dengan " -"token JWT dan izin berbasis peran.\n" -"- Pemrosesan Pembayaran:** Mengintegrasikan beberapa gateway pembayaran dan " -"mengelola transaksi dengan aman.\n" -"- Manajemen Blog & Konten:** Buat dan kelola posting blog dan konten " -"pemasaran untuk toko Anda.\n" -"- ** Operasi B2B:** Titik akhir khusus untuk transaksi bisnis-ke-bisnis dan " -"manajemen grosir.\n" -"- Dukungan Multi-bahasa:** Melayani pelanggan di seluruh dunia dengan " -"kemampuan internasionalisasi penuh (i18n).\n" -"- Integrasi Khusus:** Arsitektur API yang dapat diperluas untuk berintegrasi " -"dengan platform dan layanan eksternal.\n" -"- Analisis & Pelaporan:** Menghasilkan laporan terperinci tentang penjualan, " -"inventaris, dan perilaku pelanggan.\n" -"- **Pembaruan Waktu Nyata:** Dapatkan data langsung tentang tingkat " -"inventaris, status pesanan, dan perubahan harga.\n" +"- Katalog Produk:** Kelola detail produk, harga, inventaris, dan ketersediaan di berbagai kategori.\n" +"- Manajemen Pesanan:** Memproses pesanan, melacak pemenuhan pesanan, dan menangani permintaan pelanggan secara efisien.\n" +"- Autentikasi & Otorisasi:** Autentikasi pengguna yang komprehensif dengan token JWT dan izin berbasis peran.\n" +"- Pemrosesan Pembayaran:** Mengintegrasikan beberapa gateway pembayaran dan mengelola transaksi dengan aman.\n" +"- Manajemen Blog & Konten:** Buat dan kelola posting blog dan konten pemasaran untuk toko Anda.\n" +"- ** Operasi B2B:** Titik akhir khusus untuk transaksi bisnis-ke-bisnis dan manajemen grosir.\n" +"- Dukungan Multi-bahasa:** Melayani pelanggan di seluruh dunia dengan kemampuan internasionalisasi penuh (i18n).\n" +"- Integrasi Khusus:** Arsitektur API yang dapat diperluas untuk berintegrasi dengan platform dan layanan eksternal.\n" +"- Analisis & Pelaporan:** Menghasilkan laporan terperinci tentang penjualan, inventaris, dan perilaku pelanggan.\n" +"- **Pembaruan Waktu Nyata:** Dapatkan data langsung tentang tingkat inventaris, status pesanan, dan perubahan harga.\n" "\n" "## API yang tersedia\n" "- **REST API:** Antarmuka RESTful penuh (dokumentasi ini)\n" -"- API GraphQL:** Tersedia di `/graphql/` dengan antarmuka GraphiQL untuk " -"kueri interaktif\n" +"- API GraphQL:** Tersedia di `/graphql/` dengan antarmuka GraphiQL untuk kueri interaktif\n" "\n" "## Otentikasi\n" -"- Otentikasi ditangani melalui token JWT. Sertakan token di header `X-EVIBES-" -"AUTH` pada permintaan Anda dalam format `Bearer `.\n" +"- Otentikasi ditangani melalui token JWT. Sertakan token di header `X-EVIBES-AUTH` pada permintaan Anda dalam format `Bearer `.\n" "- Masa berlaku token akses adalah {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Masa berlaku token refresh adalah {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} jam.\n" -"- Refresh token secara otomatis dirotasi dan dibatalkan setelah digunakan " -"untuk meningkatkan keamanan.\n" +"- Refresh token secara otomatis dirotasi dan dibatalkan setelah digunakan untuk meningkatkan keamanan.\n" "\n" "## Internasionalisasi (i18n)\n" -"- Atur header `Accept-Language` untuk menentukan bahasa yang Anda inginkan " -"(misalnya, `Accept-Language: en-US`).\n" +"- Atur header `Accept-Language` untuk menentukan bahasa yang Anda inginkan (misalnya, `Accept-Language: en-US`).\n" "- Bahasa yang tersedia dapat diambil dari titik akhir `/app/languages/`.\n" -"- Semua konten yang berhadapan dengan pengguna mendukung beberapa bahasa " -"secara langsung.\n" +"- Semua konten yang berhadapan dengan pengguna mendukung beberapa bahasa secara langsung.\n" "\n" "Format Tanggapan ## Format Tanggapan\n" "API mendukung beberapa format respons:\n" "- **JSON** (default, berformat camelCase)\n" "- **XML** (tambahkan `?format=xml` atau setel `Accept: application/xml`)\n" -"- **YAML** (tambahkan `?format=yaml` atau setel `Accept: application/x-" -"yaml`)\n" +"- **YAML** (tambahkan `?format=yaml` atau setel `Accept: application/x-yaml`)\n" "\n" "## Kesehatan & Pemantauan\n" "- Pemeriksaan kesehatan: `/health/`\n" @@ -262,18 +229,54 @@ msgstr "" "## Versi\n" "Versi API saat ini: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Beranda" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Etalase" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Dasbor" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Kesehatan" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfigurasi" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Pengguna" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grup" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produk" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategori" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Merek" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Posting blog" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Tugas Berkala" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Papan tugas" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Dukungan" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.mo b/evibes/locale/it_IT/LC_MESSAGES/django.mo index d81b127c2446067c54ca7d32fa3d3c5ed4247a53..5a304af4ef02aad0b887f46d46e0cb9f0e975ab3 100644 GIT binary patch delta 1634 zcmZ9LPiWjl6vtmcIM~I z{9>{yOYtD$Nq(qMgn~B@iV!P`2eHyyJ?TL&^;8d1y$OmQ{J!7*N}vzke&)@eH}8Fa zv)@1S<=O7_-Tm(qY!W^M58H@Nf!F%*1N-U@qVqe6z6S3{T;4@=A9w_O06Ymk488y! z20P&0;3aT7_z8&P^m!3~Q>cm?bSe+0SkpFyOin_va}H;=nS2eA79CMLig;2d}lxBzk|=Rr=a zir5$No8Tzs-v#diKP}cTgUg7&E#}K;lh=pAJHavVMW{Rp-ss|{cXszGv?D#f1+ugs zf{%lrfycocAQ!YB<+CD(K#nIs?rf%rXF=Re^B{kkmx}ebL8PD$z`fvQu*->lz<{Ow z3FP=!@G0;&@HBW>^e$+C{EbtPrM(EUw3k3MLz^J4UoGO_L8PGnKvs4LahuYr@G0{P&3AWL`=G~mY|cRYBoM*(u-)8ICc_hL()8_3n%!vh!> zz&Y>b0Qct?vrLEJ!#oEQaPEw|t&qGSrY8H^N1-jl)?P z?wXb2_r`Bw=t=za!MWSp4G%Q83H&|;-v`H2p$Fl)ZT{7_XJ`4OSeZ_oZL82ysh+fJm}$jSr9 z9#c-+x{gFm`d2(HwyaUYr0rGZZre?`ww^}8XDb6M-84z83&f}L8ZlZI4m}8M#LKDE z9!a?#&az=sck9wAQB`tHiAROb7ew8f@gQE4CWv4K)QXh%BFJ^+r)b$Lv9wgpS*tEF z9jbJje-7L%9p4ghUb?8IwnQv6Or7kY1}wPLM>YhT{W5%E-?I+oYi?+LL$IW@B;z!w ztTS?UCXVn~LSCb-awEy3OxNP0`qL(6R1xcs|!|E6gPf$^=dS1Jv?2#Q*>R delta 1105 zcmZY7Pe>GD7{~D^wLeB0&ayjeYQ)x| zL#GZyN5Mk`T@!-3gm@}Eb&T|sC&R8q9r`}&7)39>`+47SX5QcX%=@}$`EqfsuHu={ zTIomVCwGW+;)ODPXy0+NO5_LbXP&4Q3E~Vk;1g`e1#H9jSc{u@7^Oypp)}$FY)5_m z5(Y$yGRT1U%LrEBBzB>L-S`~!fmPH1o4#c{%}^RJj1g?Y>$n#!ti&{GfP4P@u|I!` zEvzr|3^c$y+>IYlAN=UgKl^^cJ5=W@uCu~TwyA+mH*eX4T9IKqhYp^_7pNQfgj%T$ z)Zq0Ykr3<4Q3eO`D(a25Q3Fk(R%9A4;(fe=Z%|A96E%Qg`&#lY-y5j^A4dM<0Y6%i zdDM-)M6Jjo7ImQ|2D3Xs(}4O; zZFO`#Yn+dw=sDBx#+s#+dPsKBbzyDgbWN)j()2C#?Z%goL-d{g1qxEC*gk*Wh#Fj* zewx3VZdj@o-1( z))!qoQTwgh>kmI9*&NA|W_&AYQcCHJ29;}8-tyMNkGz73L\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Nome del progetto" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Nome della società" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Numero di telefono dell'azienda" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Aliquota fiscale nella giurisdizione della vostra azienda. Lasciare 0 se non" +" si desidera elaborare le imposte." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Chiave API del tasso di cambio" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! NON CAMBIARE!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Porta SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Utilizzare TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Utilizzare SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Nome utente SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Password SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "L'indirizzo del mittente dell'e-mail" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Per quanti giorni conserviamo i messaggi degli utenti anonimi" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Per quanti giorni conserviamo i messaggi degli utenti autenticati" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Disattivare la funzionalità di acquisto" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL dell'API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Chiave API OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Chiave API astratta" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Un'entità per la memorizzazione dei dati pubblicitari" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Un'entità per la memorizzazione dei dati analitici" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Salvare le risposte dalle API dei fornitori" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Opzioni generali" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Opzioni legali" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Opzioni e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Caratteristiche Opzioni" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Opzioni SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Opzioni di debug" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,65 +183,44 @@ msgstr "" "\n" "Benvenuti nella documentazione di eVibes.\n" "\n" -"eVibes è una potente piattaforma di e-commerce che consente di lanciare e " -"gestire un negozio online di qualsiasi tipo in pochi clic.\n" +"eVibes è una potente piattaforma di e-commerce che consente di lanciare e gestire un negozio online di qualsiasi tipo in pochi clic.\n" "\n" "## Caratteristiche principali\n" -"- **Catalogo dei prodotti:** Gestione dei dettagli dei prodotti, dei prezzi, " -"delle scorte e della disponibilità di più categorie.\n" -"- Gestione degli ordini:** Elaborazione degli ordini, monitoraggio " -"dell'evasione e gestione efficiente delle richieste dei clienti.\n" -"- Autenticazione e autorizzazione:** Autenticazione completa degli utenti " -"con token JWT e autorizzazioni basate sui ruoli.\n" -"- Elaborazione dei pagamenti:** Integrazione di più gateway di pagamento e " -"gestione sicura delle transazioni.\n" -"- Gestione di blog e contenuti:** Creazione e gestione di post sul blog e di " -"contenuti di marketing per il vostro negozio.\n" -"- Operazioni B2B:** Endpoint dedicati per le transazioni business-to-" -"business e la gestione della vendita all'ingrosso.\n" -"- Supporto multilingue:** Servite i clienti in tutto il mondo con " -"funzionalità di internazionalizzazione completa (i18n).\n" -"- Integrazioni personalizzate:** Architettura API estensibile per " -"l'integrazione con piattaforme e servizi esterni.\n" -"- **Analitica e reportistica:** Generazione di report dettagliati su " -"vendite, inventario e comportamento dei clienti.\n" -"- Aggiornamenti in tempo reale:** Ottenete dati in tempo reale sui livelli " -"di inventario, sullo stato degli ordini e sulle modifiche dei prezzi.\n" +"- **Catalogo dei prodotti:** Gestione dei dettagli dei prodotti, dei prezzi, delle scorte e della disponibilità di più categorie.\n" +"- Gestione degli ordini:** Elaborazione degli ordini, monitoraggio dell'evasione e gestione efficiente delle richieste dei clienti.\n" +"- Autenticazione e autorizzazione:** Autenticazione completa degli utenti con token JWT e autorizzazioni basate sui ruoli.\n" +"- Elaborazione dei pagamenti:** Integrazione di più gateway di pagamento e gestione sicura delle transazioni.\n" +"- Gestione di blog e contenuti:** Creazione e gestione di post sul blog e di contenuti di marketing per il vostro negozio.\n" +"- Operazioni B2B:** Endpoint dedicati per le transazioni business-to-business e la gestione della vendita all'ingrosso.\n" +"- Supporto multilingue:** Servite i clienti in tutto il mondo con funzionalità di internazionalizzazione completa (i18n).\n" +"- Integrazioni personalizzate:** Architettura API estensibile per l'integrazione con piattaforme e servizi esterni.\n" +"- **Analitica e reportistica:** Generazione di report dettagliati su vendite, inventario e comportamento dei clienti.\n" +"- Aggiornamenti in tempo reale:** Ottenete dati in tempo reale sui livelli di inventario, sullo stato degli ordini e sulle modifiche dei prezzi.\n" "\n" "## API disponibili\n" "- API REST:** Interfaccia REST completa (questa documentazione)\n" -"- API **GraphQL:** Disponibile su `/graphql/` con interfaccia GraphiQL per " -"le query interattive.\n" +"- API **GraphQL:** Disponibile su `/graphql/` con interfaccia GraphiQL per le query interattive.\n" "\n" "## Autenticazione\n" -"- L'autenticazione è gestita tramite token JWT. Includere il token " -"nell'intestazione `X-EVIBES-AUTH` delle richieste nel formato `Bearer " -"`.\n" +"- L'autenticazione è gestita tramite token JWT. Includere il token nell'intestazione `X-EVIBES-AUTH` delle richieste nel formato `Bearer `.\n" "- La durata di vita del token di accesso è {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- La durata del token di aggiornamento è di {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} ore.\n" -"- I token di aggiornamento vengono ruotati e invalidati automaticamente dopo " -"l'uso per una maggiore sicurezza.\n" +"- I token di aggiornamento vengono ruotati e invalidati automaticamente dopo l'uso per una maggiore sicurezza.\n" "\n" "## Internazionalizzazione (i18n)\n" -"- Impostare l'intestazione `Accept-Language` per specificare la lingua " -"preferita (ad esempio, `Accept-Language: en-US`).\n" -"- Le lingue disponibili possono essere recuperate dall'endpoint `/app/" -"languages/`.\n" -"- Tutti i contenuti rivolti all'utente supportano immediatamente più " -"lingue.\n" +"- Impostare l'intestazione `Accept-Language` per specificare la lingua preferita (ad esempio, `Accept-Language: en-US`).\n" +"- Le lingue disponibili possono essere recuperate dall'endpoint `/app/languages/`.\n" +"- Tutti i contenuti rivolti all'utente supportano immediatamente più lingue.\n" "\n" "## Formati di risposta\n" "L'API supporta diversi formati di risposta:\n" "- **JSON** (predefinito, formattato in camelCase)\n" "- **XML** (aggiungere `?format=xml` o impostare `Accept: application/xml`)\n" -"- **YAML** (aggiungere `?format=yaml` o impostare `Accept: application/x-" -"yaml`)\n" +"- **YAML** (aggiungere `?format=yaml` o impostare `Accept: application/x-yaml`)\n" "\n" "## Salute e monitoraggio\n" "- Controlli sulla salute: `/salute/`\n" @@ -263,18 +229,54 @@ msgstr "" "## Versione\n" "Versione attuale dell'API: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Casa" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Storefront" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Cruscotto" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Salute" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Configurazione" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Utenti" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Gruppi" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Prodotti" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Categorie" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Marche" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Compiti periodici" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Lavagna" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Supporto" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.mo b/evibes/locale/ja_JP/LC_MESSAGES/django.mo index 275260084d0912b72abaf36d4764b9e4c7eff298..2cf57abb0b7df831530bb68ef3686b8418ce7e1e 100644 GIT binary patch delta 1677 zcmZ9LU2GIp6vq!Oq7>UIu%b}P-4;ZOKqVLvO)y}PhnCi~_|h0V-JQ0J?aXFo7F!M3 z&P*fV^3gc1#fpKZQfZNb?rQA^AM%V(zWBrgx7%IgS9~yH^uhm`4lkVSncqG4o^$TG z=iW{2{p_{mo#l(u1lbI&fLe=)UIK3y;RE@un5dG6E)x?;688}*Z}fLT0l;$ z2DTa4N5C-VQ{cnk}uPSe!)WjAD z1v6kRcr)Oi!FrWgSlf?M5yBCV>A?SMmVDSIgJT zdHMbMkBVO~VrebUK?IZw;RnPgS_S0}uy89kLAg`h=3?ju=zT$rzHmqQ!Le+F^1p+- zg=_cU8^48$m+>ir^55@4;k#w2fj$l8yW`WYhWe8Et7v6OXqRZ+7B}>6)#_9e<~GoX zMZ7Jg-#@#jOYey5re)F|L(!rp?NuzbLpNe7hPu`s>!4Q^v$IWCjHvfpX=Ih5C*mgU zZ*FcBjfURSOZ!!&%j)#BGW~@*wL|F=4RI@`YbMnzu`bb$U4`z?P`#=p=z!9#3cX#R z5)sk69YwQ*r3-W` zqMD|#lpfXGN(W6wmjy)2!pg^OqArc)$c*kjVoNcT8N z=aO{amrho?X@E{O8(RvufARp}xa6N7%gL4O}? zHAy-9LT-A}8(Q~4Xg-t95A{n2`3JEi-7m0%S1qbnNOxGeDL?Zp&CL$wKfms^iRX9b zCWhwEp5q{UTsk+TGbNoXfrGRse*Sc(F!ohGJ)S!~NrjPXInT~#r{-o--j^cf)rTvi zg|D;7m7f?cTtkkD{KZrGQ%7Z=gF!C!N$%)qegJ3wurPc=I;VLPyFYh6n;SSL?JKhH qM6K*Qi7;tj_kWk9Jt*x_X~XrrwA1iLF7Hq{Tq@mB?tt?x_wIj+*{SdV delta 1109 zcmY+?Ur19?90%~9oBgwN{wXsxJ9inaEHp^4KSU6fl&P=L=w0MEu`$Rh#rF8%7@OPsE}TQ>Z$K<-lBf&x6e7}-t*_4bEeMTIF(*0 zFB~U?7g>uuP(aiOkGt@P_yMCuL_c8#>fvIdQaA`J;dSVP)36>shh=aT?toN6gd$bL zZO{j~{|V?JN>c|47@xXeA&kPq(1a~;26BgYkQcD(=t6H4sS@sjdtePb4L3s_Zh|q$ z3m9Tex$@G^GiD|BPTbNEdDqV~G{mrxjPLEVB) z@S5X1#E+Dt3#;Xw(O?zkr(-DaKmo@npy;ysG26F#S$o(P^ zuh0PG_6b-H=OFLIGUT0n1=HN{-f8#-dF6!|ojW!|{-X1c2e{Qo9S%N@ ztw0g zP77}{-yvQ!M>Ud^YUe zZ-JCOsq7_XPfMYV$z{!3n_Ig3apuW~+c)uS?ZrivnN^vG${v;9wPtzJTPZ`{v5H4% VP?>wm9_QigEI\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "プロジェクト名" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "会社名" @@ -30,153 +26,142 @@ msgid "Phone number of the company" msgstr "会社の電話番号" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "貴社管轄の税率。税務処理を行わない場合は「0」のままにしてください。" + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "為替レートAPIキー" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "変えないでくれ" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTPホスト" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTPポート" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "TLSを使用する" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "SSLの使用" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTPユーザー名" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTPパスワード" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "メール送信者のアドレス" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "匿名ユーザーからのメッセージの保存日数" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "認証されたユーザーからのメッセージを何日間保存するか" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "購入機能を無効にする" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI APIキー" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "抽象APIキー" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTPプロキシ" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "広告データを保存するエンティティ" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "分析データを保存するエンティティ" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "ベンダーのAPIからの応答を保存する" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "一般オプション" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "法的オプション" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Eメールオプション" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "機能オプション" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEOオプション" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "デバッグ・オプション" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +173,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,48 +181,36 @@ msgstr "" "\n" "eVibes のドキュメントへようこそ。\n" "\n" -"eVibesは、数クリックであらゆる種類のオンラインストアを立ち上げ、管理できる強" -"力なeコマースプラットフォームです。\n" +"eVibesは、数クリックであらゆる種類のオンラインストアを立ち上げ、管理できる強力なeコマースプラットフォームです。\n" "\n" "## 主な機能\n" -"- 商品カタログ:** 複数のカテゴリにまたがる商品の詳細、価格、在庫、在庫状況を" -"管理します。\n" +"- 商品カタログ:** 複数のカテゴリにまたがる商品の詳細、価格、在庫、在庫状況を管理します。\n" "- 注文管理:**注文を処理し、履行を追跡し、顧客の要求を効率的に処理します。\n" "- JWT トークンとロールベースの権限による包括的なユーザー認証。\n" "- 複数の決済ゲートウェイを統合し、トランザクションを安全に管理します。\n" -"- ブログ・コンテンツ管理:** ブログ記事やマーケティングコンテンツを作成・管理" -"できます。\n" +"- ブログ・コンテンツ管理:** ブログ記事やマーケティングコンテンツを作成・管理できます。\n" "- B2B オペレーション:** 企業間取引と卸売管理のための専用エンドポイント。\n" -"- **多言語サポート:**完全な国際化(国際化)機能で世界中の顧客にサービスを提供" -"します。\n" -"- カスタム統合:**外部プラットフォームやサービスと統合するための拡張可能なAPI" -"アーキテクチャ。\n" +"- **多言語サポート:**完全な国際化(国際化)機能で世界中の顧客にサービスを提供します。\n" +"- カスタム統合:**外部プラットフォームやサービスと統合するための拡張可能なAPIアーキテクチャ。\n" "- 分析&レポート:**売上、在庫、顧客行動に関する詳細なレポートを生成します。\n" -"- リアルタイム更新:**在庫レベル、注文状況、価格変更に関するライブデータを取" -"得します。\n" +"- リアルタイム更新:**在庫レベル、注文状況、価格変更に関するライブデータを取得します。\n" "\n" "## 利用可能なAPI\n" "- **REST API:** 完全なRESTfulインターフェース(このドキュメント)\n" -"- **GraphQL API:** `/graphql/` で利用可能で、対話的なクエリのための GraphiQL " -"インターフェースがある。\n" +"- **GraphQL API:** `/graphql/` で利用可能で、対話的なクエリのための GraphiQL インターフェースがある。\n" "\n" "## 認証\n" -"- 認証はJWTトークンで行われる。リクエストの `X-EVIBES-AUTH` ヘッダーに " -"`Bearer ` という形式でトークンを含めてください。\n" +"- 認証はJWTトークンで行われる。リクエストの `X-EVIBES-AUTH` ヘッダーに `Bearer ` という形式でトークンを含めてください。\n" "- アクセストークンの有効期限は {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}。\n" "- リフレッシュ・トークンの有効期限は {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} 時間です。\n" -"- リフレッシュ・トークンはセキュリティ強化のため、使用後に自動的にローテー" -"ションされ無効化されます。\n" +"- リフレッシュ・トークンはセキュリティ強化のため、使用後に自動的にローテーションされ無効化されます。\n" "\n" "## 国際化 (i18n)\n" -"- Accept-Language`ヘッダを設定して、希望する言語を指定する (例: `Accept-" -"Language: en-US`) 。\n" +"- Accept-Language`ヘッダを設定して、希望する言語を指定する (例: `Accept-Language: en-US`) 。\n" "- 利用可能な言語は `/app/languages/` エンドポイントから取得できます。\n" "- すべてのユーザー向けコンテンツは、すぐに多言語をサポートします。\n" "\n" @@ -245,8 +218,7 @@ msgstr "" "APIは複数のレスポンスフォーマットをサポートしています:\n" "- JSON** (デフォルト、キャメルケースフォーマット)\n" "- XML** (`?format=xml` を追加するか、`Accept: application/xml` を設定する)\n" -"- YAML** (`?format=yaml` を追加するか、`Accept: application/x-yaml` を設定し" -"てください)\n" +"- YAML** (`?format=yaml` を追加するか、`Accept: application/x-yaml` を設定してください)\n" "\n" "## ヘルス&モニタリング\n" "- ヘルスチェックヘルスチェック: `/health/`\n" @@ -255,18 +227,54 @@ msgstr "" "## バージョン\n" "現在のAPIバージョン:現在のAPIバージョン: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "ホーム" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "メニュー" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "ストアフロント" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "ダッシュボード" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "健康" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "コンフィグ" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "ユーザー" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "グループ" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "製品紹介" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "カテゴリー" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "ブランド" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "ブログ記事" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "定期的なタスク" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "タスクボード" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "サポート" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index 7e2d849a..94d6de17 100644 --- a/evibes/locale/kk_KZ/LC_MESSAGES/django.po +++ b/evibes/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 16:53+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,10 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "" @@ -33,102 +29,108 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:55 -msgid "General Options" +#: evibes/settings/constance.py:56 +msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" @@ -191,24 +193,60 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/jazzmin.py:20 -msgid "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" msgstr "" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" msgstr "" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.mo b/evibes/locale/ko_KR/LC_MESSAGES/django.mo index 038c95374c7d1090d19ce054008dc6da55dab2f1..23b24e2cf1a439634eac82720bf85659a044d63d 100644 GIT binary patch delta 1607 zcmZA0UuYaf90%~9vBtLc5*u??+vGY`YfaClRSJ<pr8+m*ashP=ZX)Cf-io5dz+UI%zbud z=g)6`J9p{yKe6oHmK}LQiK4clIu8)N4DU4H2c_~L(co^PE%+GP;U=O-VF!F1cEji3 zoA4R<0o(;YgN<+nVmhq_?Qeqjx8Yu*EZxDwlNfLphTy+23>%y48?`}R=osXMP6qAM z@Fd!2;7jmB$n(pP1H27)z@H!o{tLv?q~JmLpWn_B9l+=V=r{^@!ZYv@cnlOe*_Pqe-1tjuLtip;d!*b4f?}4Cckfo55dFmZDctLb6M;(+fq+`Q=}eY6!M1M z@F?sFv>~6Q2syBIxCh>ZoT2Z7_Ky&I)9-LUyce{0;nfqz0?=q==*9fq8d6hvnIbmP&V1N@8H$`2^K4}WIP9N#~G z0lvXcqw?vv2vm-oFAxq#`%pPBE__)#P&qJUmhi`*!>HTkso;S>0iTi!ABO)O93&r@ z?;GERwo~}we_9mv{(=kY7rq0}qCSC&tKxrCfb{&`(7HR^EryP#Et%4tF+F1+hnA6W zkA-eM9~+mWX=yt)#VpNC+VraC=%dmybUaFP#2BU5G<$4VYF5&%g%bNLnMvE!6OZ?c zeoIbFQje~UJ7ccdB)fX`QEgnDOFM=%ZR*pEaWR5jh4g!M0x*-GfPEgWq^ zw>#;)t&4$yUf+1{0Ba#iYvW$C6>?*(Em86+^Ioywxdl>N<=XUob))2cu}am=Rh7Fz z-u#rBD|j1a3~(>B54Kgmu6Uns)e~8}ob#5K@SdtS%GI^J`)j+o$6L><(#JwAZmMbb z^@s?0E0?|5GS#lmtBb2{HWCY|QodSQ6RNnNu1ve%MZ%4$RH%JAuxMV(?S9vi7*f%DNEt5haTcuy%ja@_PE<4?d2lQ zG7T!$?6kYMK#Hh`=nO1^@F|Kw2#yj2C*KRz25Y=FBUPk0=zg#pNk`XNuGJ0>7D#J)Sg zPQD3ptU%>O<_jm}ST2>QymPo83F3Rk=Z3lLbK`|@()FlZcn3K77F0f#I@El@Nzhi* zHO>qCkbQ?XI(^=5K2k1xS^q73BvhJvQRFVI7mdA2Y_M;i64wVrB&z9ZpRNY?9293; z&%bwFhW?q_4QbMMl$+6Vx`mCv>c`qX;(`3zz z8$NH?Sn_&mtl4Yw(qoLDH}5CO9+Q^Yj5V=f{PuQK_fu(^3A`3=-(9p diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.po b/evibes/locale/ko_KR/LC_MESSAGES/django.po index c1e77967..786c5782 100644 --- a/evibes/locale/ko_KR/LC_MESSAGES/django.po +++ b/evibes/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "프로젝트 이름" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "회사 이름" @@ -30,153 +26,142 @@ msgid "Phone number of the company" msgstr "회사 전화번호" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "회사 관할 지역의 세율입니다. 세금을 처리하지 않으려면 0을 그대로 둡니다." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "환율 API 키" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!변경하지 마세요!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP 호스트" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP 포트" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "TLS 사용" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "SSL 사용" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP 사용자 이름" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP 비밀번호" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "이메일 발신자의 주소" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "익명 사용자의 메시지를 보관하는 일수" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "인증된 사용자의 메시지를 보관하는 일수" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "구매 기능 비활성화" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "오픈스트리트맵 노미나팀 API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API 키" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "추상 API 키" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP 프록시" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "광고 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "분석 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "공급업체 API의 응답 저장하기" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "일반 옵션" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "법적 옵션" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "이메일 옵션" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "기능 옵션" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO 옵션" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "디버깅 옵션" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +173,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,50 +181,36 @@ msgstr "" "\n" "eVibes 문서에 오신 것을 환영합니다.\n" "\n" -"eVibes는 클릭 몇 번으로 모든 종류의 온라인 스토어를 시작하고 관리할 수 있는 " -"강력한 전자상거래 플랫폼입니다.\n" +"eVibes는 클릭 몇 번으로 모든 종류의 온라인 스토어를 시작하고 관리할 수 있는 강력한 전자상거래 플랫폼입니다.\n" "\n" "주요 기능 ## 주요 기능\n" -"- **제품 카탈로그:** 여러 카테고리에서 제품 세부 정보, 가격, 재고 및 가용성" -"을 관리합니다.\n" -"- 주문 관리:** 주문을 처리하고, 주문 이행을 추적하고, 고객 요청을 효율적으로 " -"처리하세요.\n" -"- 인증 및 권한 부여:** JWT 토큰 및 역할 기반 권한으로 포괄적인 사용자 인증을 " -"수행합니다.\n" +"- **제품 카탈로그:** 여러 카테고리에서 제품 세부 정보, 가격, 재고 및 가용성을 관리합니다.\n" +"- 주문 관리:** 주문을 처리하고, 주문 이행을 추적하고, 고객 요청을 효율적으로 처리하세요.\n" +"- 인증 및 권한 부여:** JWT 토큰 및 역할 기반 권한으로 포괄적인 사용자 인증을 수행합니다.\n" "- 결제 처리:** 여러 결제 게이트웨이를 통합하고 거래를 안전하게 관리하세요.\n" -"- **블로그 및 콘텐츠 관리:** 스토어용 블로그 게시물과 마케팅 콘텐츠를 생성하" -"고 관리합니다.\n" +"- **블로그 및 콘텐츠 관리:** 스토어용 블로그 게시물과 마케팅 콘텐츠를 생성하고 관리합니다.\n" "- B2B 운영:** B2B 거래 및 도매 관리를 위한 전용 엔드포인트.\n" -"- 다국어 지원:** 완전한 국제화(i18n) 기능으로 전 세계 고객에게 서비스를 제공" -"합니다.\n" -"- **맞춤형 통합:** 외부 플랫폼 및 서비스와의 통합을 위한 확장 가능한 API 아키" -"텍처.\n" -"- **분석 및 보고:** 판매, 재고, 고객 행동에 대한 상세한 보고서를 생성합니" -"다.\n" -"- 실시간 업데이트:** 재고 수준, 주문 상태, 가격 변동에 대한 실시간 데이터를 " -"확인할 수 있습니다.\n" +"- 다국어 지원:** 완전한 국제화(i18n) 기능으로 전 세계 고객에게 서비스를 제공합니다.\n" +"- **맞춤형 통합:** 외부 플랫폼 및 서비스와의 통합을 위한 확장 가능한 API 아키텍처.\n" +"- **분석 및 보고:** 판매, 재고, 고객 행동에 대한 상세한 보고서를 생성합니다.\n" +"- 실시간 업데이트:** 재고 수준, 주문 상태, 가격 변동에 대한 실시간 데이터를 확인할 수 있습니다.\n" "\n" "## 사용 가능한 API\n" "- **REST API:** 전체 RESTful 인터페이스(이 문서)\n" -"- GraphQL API:** 대화형 쿼리를 위한 GraphiQL 인터페이스로 `/graphql/`에서 사" -"용 가능\n" +"- GraphQL API:** 대화형 쿼리를 위한 GraphiQL 인터페이스로 `/graphql/`에서 사용 가능\n" "\n" "## 인증\n" -"- 인증은 JWT 토큰을 통해 처리됩니다. 토큰을 요청의 `X-EVIBES-AUTH` 헤더에 " -"`Bearer ` 형식으로 포함하세요.\n" +"- 인증은 JWT 토큰을 통해 처리됩니다. 토큰을 요청의 `X-EVIBES-AUTH` 헤더에 `Bearer ` 형식으로 포함하세요.\n" "- 액세스 토큰 수명은 {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "}입니다. {\"minutes\" if not DEBUG else \"hours\"}입니다.\n" "- 새로 고침 토큰 수명은 {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} 시간입니다.\n" "- 새로 고침 토큰은 보안 강화를 위해 사용 후 자동으로 교체되고 무효화됩니다.\n" "\n" "## 국제화(i18n)\n" -"- 수락 언어` 헤더를 설정하여 선호하는 언어를 지정합니다(예: `수락 언어: en-" -"US`).\n" +"- 수락 언어` 헤더를 설정하여 선호하는 언어를 지정합니다(예: `수락 언어: en-US`).\n" "- 사용 가능한 언어는 `/app/languages/` 엔드포인트에서 검색할 수 있습니다.\n" "- 모든 사용자 대상 콘텐츠는 기본적으로 여러 언어를 지원합니다.\n" "\n" @@ -256,18 +227,54 @@ msgstr "" "## 버전\n" "현재 API 버전입니다: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "홈" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "메뉴" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "스토어 프론트" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "대시보드" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "건강" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "구성" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "사용자" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "그룹" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "제품" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "카테고리" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "브랜드" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "블로그 게시물" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "정기 작업" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "작업 보드" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "지원" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.mo b/evibes/locale/nl_NL/LC_MESSAGES/django.mo index 2f44ad39f784b80a07accefa6e936a9ef72b03d6..f9b85f013ddbbbc9423f130649bf53d8f6d308f0 100644 GIT binary patch delta 1643 zcmZ9LPi$009LGmQq(~{P)CzR#fFP9GqNWj2iH+4zG%eJ$JynxVcc;6r-F>spyzL(v zvllPMgCzEE|1FdR@4(&gXDEsP3JISKuMI0i}S?AdkAvi{jN?$fxQTD2e?AWuO0Yf3N2JC6g}Qnm7*S ztOlW6$Ty%!UxRWq8?XXDf-=69^C6VLZJYy75We7I+~hZF|n@LL@(HqkCqnGV|~L1r&>zdWlQoTlg{+%wp=s3 z(Dy<5ps%MnW~(M7QCv<8hrK9rNhEKJl_ZqyLS#!>_$9j?9mR}E5G*8yeN8oJCd<~w mtjL4WUyZ7XUa@{PlVV6A8;cfvBNAm0FY`KE?sz_dnEwNMOgf4H delta 1111 zcmZ9~%S%*I9Ki9Dk4keKANk0~%vBPnOd`;d2z!8FVJgg65QN;(W6pRV)15n|5zMNE zD}!5$7D0jkfi0p=uo4nbD&}(>xxrL{36(ylh z*oxn=234n0EyPz52JESNLI+V28bPVZB%Z}7JdY2t7eC-(+zO4vb`t7FsmLJmQ&U`I zKOg1AiYW1xu_%8$VIZYl#XfwA^58m3={E5oZin+qc9;8&NI^Sga?a$tNybtpDdm2;1e8`zmtZY)Nvey!+vF{zq?O?f@+(!WR9?ny zbor#xG)lBu!e z+VT2dHNoZBjrc|DmbS^V6j<+M*w5~}8NP|#560t(W85o4Ro64lg0^ynOkf$U!B3;(54ymxH~;_u diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.po b/evibes/locale/nl_NL/LC_MESSAGES/django.po index 267d5145..77bd412e 100644 --- a/evibes/locale/nl_NL/LC_MESSAGES/django.po +++ b/evibes/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Naam van het project" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Naam van het bedrijf" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Telefoonnummer van het bedrijf" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Belastingtarief in het rechtsgebied van je bedrijf. Laat 0 staan als je geen" +" belastingen wilt verwerken." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Wisselkoers API sleutel" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "NIET VERANDEREN!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP poort" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "TLS gebruiken" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "SSL gebruiken" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP gebruikersnaam" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP wachtwoord" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Het adres van de afzender van de e-mail" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Hoeveel dagen we berichten van anonieme gebruikers bewaren" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Hoeveel dagen we berichten van geverifieerde gebruikers bewaren" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Koopfunctie uitschakelen" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API sleutel" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstracte API-sleutel" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Een entiteit voor het opslaan van adverteerdersgegevens" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Een entiteit voor het opslaan van analytische gegevens" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Reacties opslaan van API's van leveranciers" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Algemene opties" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Juridische opties" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "E-mailopties" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Functies Opties" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO Opties" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Debugopties" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,63 +183,44 @@ msgstr "" "\n" "Welkom bij de eVibes documentatie.\n" "\n" -"eVibes is een krachtig e-commerce platform waarmee je in een paar klikken " -"een online winkel van elk type kunt starten en beheren.\n" +"eVibes is een krachtig e-commerce platform waarmee je in een paar klikken een online winkel van elk type kunt starten en beheren.\n" "\n" "## Belangrijkste functies\n" -"- **Productcatalogus:**Beheer productgegevens, prijzen, voorraad en " -"beschikbaarheid in meerdere categorieën.\n" -"- **Order Management:** Verwerk bestellingen, volg de leveringen en behandel " -"verzoeken van klanten efficiënt.\n" -"- **Authenticatie en autorisatie:**Uitgebreide gebruikersverificatie met JWT " -"tokens en rolgebaseerde rechten.\n" -"- **Betalingsverwerking:** Integreer meerdere betalingsgateways en beheer " -"transacties veilig.\n" -"- **Blog & Content Management:** Creëer en beheer blog posts en marketing " -"content voor uw winkel.\n" -"- **B2B Operations:** Specifieke eindpunten voor business-to-business " -"transacties en groothandelsbeheer.\n" -"- Ondersteuning voor meerdere talen:** Bedien klanten wereldwijd met " -"volledige internationalisatiemogelijkheden (i18n).\n" -"- Aangepaste integraties:** Extensibele API-architectuur voor integratie met " -"externe platforms en diensten.\n" -"- Analyse en rapportage:** Genereer gedetailleerde rapporten over verkoop, " -"voorraad en klantgedrag.\n" -"- Realtime updates:** Ontvang live gegevens over voorraadniveaus, " -"orderstatussen en prijswijzigingen.\n" +"- **Productcatalogus:**Beheer productgegevens, prijzen, voorraad en beschikbaarheid in meerdere categorieën.\n" +"- **Order Management:** Verwerk bestellingen, volg de leveringen en behandel verzoeken van klanten efficiënt.\n" +"- **Authenticatie en autorisatie:**Uitgebreide gebruikersverificatie met JWT tokens en rolgebaseerde rechten.\n" +"- **Betalingsverwerking:** Integreer meerdere betalingsgateways en beheer transacties veilig.\n" +"- **Blog & Content Management:** Creëer en beheer blog posts en marketing content voor uw winkel.\n" +"- **B2B Operations:** Specifieke eindpunten voor business-to-business transacties en groothandelsbeheer.\n" +"- Ondersteuning voor meerdere talen:** Bedien klanten wereldwijd met volledige internationalisatiemogelijkheden (i18n).\n" +"- Aangepaste integraties:** Extensibele API-architectuur voor integratie met externe platforms en diensten.\n" +"- Analyse en rapportage:** Genereer gedetailleerde rapporten over verkoop, voorraad en klantgedrag.\n" +"- Realtime updates:** Ontvang live gegevens over voorraadniveaus, orderstatussen en prijswijzigingen.\n" "\n" "## Beschikbare API's\n" "- **REST API:** Volledige RESTful interface (deze documentatie)\n" -"- **GraphQL API:** Beschikbaar op `/graphql/` met GraphiQL interface voor " -"interactieve queries\n" +"- **GraphQL API:** Beschikbaar op `/graphql/` met GraphiQL interface voor interactieve queries\n" "\n" "## Authenticatie\n" -"- Authenticatie wordt afgehandeld via JWT tokens. Neem het token op in de `X-" -"EVIBES-AUTH` header van je verzoeken in het formaat `Bearer `.\n" +"- Authenticatie wordt afgehandeld via JWT tokens. Neem het token op in de `X-EVIBES-AUTH` header van je verzoeken in het formaat `Bearer `.\n" "- De levensduur van het toegangstoken is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- De levensduur van een verversingstoken is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} uur.\n" -"- Refresh tokens worden automatisch geroteerd en ongeldig gemaakt na gebruik " -"voor een betere beveiliging.\n" +"- Refresh tokens worden automatisch geroteerd en ongeldig gemaakt na gebruik voor een betere beveiliging.\n" "\n" "## Internationalisatie (i18n)\n" -"- Stel de `Accept-Language` header in om uw voorkeurstaal op te geven " -"(bijvoorbeeld `Accept-Language: en-US`).\n" -"- Beschikbare talen kunnen worden opgehaald van het `/app/languages/` " -"eindpunt.\n" +"- Stel de `Accept-Language` header in om uw voorkeurstaal op te geven (bijvoorbeeld `Accept-Language: en-US`).\n" +"- Beschikbare talen kunnen worden opgehaald van het `/app/languages/` eindpunt.\n" "- Alle gebruikerscontent ondersteunt standaard meerdere talen.\n" "\n" "## Antwoordformaten\n" "De API ondersteunt meerdere antwoordformaten:\n" "- **JSON** (standaard, camelCase geformatteerd)\n" "- **XML** (voeg `?format=xml` toe of stel `Accept: application/xml` in)\n" -"- **YAML** (voeg `?format=yaml` toe of stel `Accept: application/x-yaml` " -"in)\n" +"- **YAML** (voeg `?format=yaml` toe of stel `Accept: application/x-yaml` in)\n" "\n" "## Gezondheid en bewaking\n" "- Gezondheidscontroles: `/gezondheid/`\n" @@ -261,18 +229,54 @@ msgstr "" "## Versie\n" "Huidige API versie: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Home" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Winkelpui" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Dashboard" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Gezondheid" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Config" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Gebruikers" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Groepen" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Producten" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Categorieën" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Merken" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Periodieke taken" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Taakbord" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Ondersteuning" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.mo b/evibes/locale/no_NO/LC_MESSAGES/django.mo index 1a8831990748883ac5a2a7addbec46596f7be52e..372a13958221d6cbd85f1399d42290597679e423 100644 GIT binary patch delta 1617 zcmZ9LPi$009LL9kD9};`ma6QQ@lU1vX;IUtK^g-ZtWuO%&tj;RNH8 z@LBjSl>IAE61)yK!=Ioe{xc-Bx&`;a|MGEHslBY;%fvx=FFXmi!!uASIR_=MDaNiC zzXu;?{u6i){JQx54Lr;Ehhn}&nex2??}j7rJSrc8t6fU^cxNxeQx&Clv*0brl=4ud z{Rln^ufTqI1Bw#A6}(mOA1DR%4fn2cJLIQE=_KAu@FDmn9D*tAN@kzpNWhCwGQ0#u z(#voX{tD%;E9fSPOhA$L4Ty^BJd^`Eke~X1P9(nsMcEZ7O8y8DMg3BY|JcXG#3Xr9R!pu|_DVc?e|hDj zxKbGk=BDYT0;!VRa=GMDipgU=K$Ay_FlrNRgtlRi6pmCX4^C`9O$rhfxb|EXQM!DL zPX1}~_q)?XTCsz)$7v7HL}t0e+^*j4+r6!HRL>nrY}_%vX;OCt+OU?54XhqM(T*EQ z?7UMaY!KC*dLi(p5!=w<#?eC9P%j3qIUfhMp8Yvc8?telI5jmpJELc8ytJ&QOwjht zEZPx2Gi@3{Tc1gM7)MT>4#Kux;8Y#wGwQU7QuS)kF*;t*WTI^dgxk4qp-12;KM~@vz5w7KT+siGRC!}@9hD=~w8=wd%ULYeRpC4tSd+nG&QHDL@pu?;U`HCng_b0`VSm&bR? z?+n^3XAe!mX0iR3*{T$Lz(adr6MaR6IO9IzAyU;DM;z=KoLKuF|dxAdmEV&#l> zr!|Y|DL0q5oW=j1u~UY9!>^H3VRwC7I9fl^9k`xh4JS~ELO$<$fl69_cG9)Hlp6Pq zP9%m)CWjNt#~U8kgw@g8osyujZKEwaFrH%t={e(-^6X&`$unbe;d-tJL`(hm} z31j3~!DTd#*}v6=euz~`Zzc5e7{ WX(v?(&*`Sd3tk~x%C6KQJ@p&CK)TBS diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.po b/evibes/locale/no_NO/LC_MESSAGES/django.po index c7d25280..c27ed7bd 100644 --- a/evibes/locale/no_NO/LC_MESSAGES/django.po +++ b/evibes/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Prosjektets navn" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Selskapets navn" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Telefonnummer til selskapet" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Skattesats i jurisdiksjonen til selskapet ditt. La 0 stå hvis du ikke ønsker" +" å behandle skatter." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "API-nøkkel for valutakurs" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! IKKE ENDRE !!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP-vert" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Bruk TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Bruk SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP-brukernavn" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP-passord" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Adressen til avsenderen av e-posten" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Hvor mange dager vi lagrer meldinger fra anonyme brukere" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Hvor mange dager vi lagrer meldinger fra autentiserte brukere" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Deaktiver kjøpsfunksjonalitet" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API-nøkkel" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstrakt API-nøkkel" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "En enhet for lagring av annonseringsdata" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "En enhet for lagring av analysedata" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Lagre svar fra leverandørers API-er" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Generelle alternativer" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Juridiske alternativer" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "E-postalternativer" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Funksjoner Alternativer" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO-alternativer" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Alternativer for feilsøking" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,53 +183,36 @@ msgstr "" "\n" "Velkommen til eVibes-dokumentasjonen.\n" "\n" -"eVibes er en kraftig e-handelsplattform som lar deg starte og administrere " -"en hvilken som helst type nettbutikk med bare noen få klikk.\n" +"eVibes er en kraftig e-handelsplattform som lar deg starte og administrere en hvilken som helst type nettbutikk med bare noen få klikk.\n" "\n" "## Nøkkelfunksjoner\n" -"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og " -"tilgjengelighet på tvers av flere kategorier.\n" -"- Ordrehåndtering:** Behandle bestillinger, spore oppfyllelse og håndtere " -"kundeforespørsler effektivt.\n" -"- Autentisering og autorisasjon:** Omfattende brukerautentisering med JWT-" -"tokens og rollebaserte tillatelser.\n" -"- Betalingsbehandling: ** Integrer flere betalingsportaler og håndter " -"transaksjoner på en sikker måte.\n" -"- Blogg- og innholdsadministrasjon:** Opprett og administrer blogginnlegg og " -"markedsføringsinnhold for butikken din.\n" -"- B2B-drift: ** Dedikerte endepunkter for business-to-business-transaksjoner " -"og grossistadministrasjon.\n" -"- Flerspråklig støtte:** Betjen kunder over hele verden med full " -"internasjonaliseringsfunksjonalitet (i18n).\n" -"- Tilpassede integrasjoner:** Utvidbar API-arkitektur for integrering med " -"eksterne plattformer og tjenester.\n" -"- Analyse og rapportering:** Generer detaljerte rapporter om salg, " -"lagerbeholdning og kundeatferd.\n" -"- Sanntidsoppdateringer:** Få sanntidsdata om lagernivåer, ordrestatus og " -"prisendringer.\n" +"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og tilgjengelighet på tvers av flere kategorier.\n" +"- Ordrehåndtering:** Behandle bestillinger, spore oppfyllelse og håndtere kundeforespørsler effektivt.\n" +"- Autentisering og autorisasjon:** Omfattende brukerautentisering med JWT-tokens og rollebaserte tillatelser.\n" +"- Betalingsbehandling: ** Integrer flere betalingsportaler og håndter transaksjoner på en sikker måte.\n" +"- Blogg- og innholdsadministrasjon:** Opprett og administrer blogginnlegg og markedsføringsinnhold for butikken din.\n" +"- B2B-drift: ** Dedikerte endepunkter for business-to-business-transaksjoner og grossistadministrasjon.\n" +"- Flerspråklig støtte:** Betjen kunder over hele verden med full internasjonaliseringsfunksjonalitet (i18n).\n" +"- Tilpassede integrasjoner:** Utvidbar API-arkitektur for integrering med eksterne plattformer og tjenester.\n" +"- Analyse og rapportering:** Generer detaljerte rapporter om salg, lagerbeholdning og kundeatferd.\n" +"- Sanntidsoppdateringer:** Få sanntidsdata om lagernivåer, ordrestatus og prisendringer.\n" "\n" "## Tilgjengelige API-er\n" "- **REST API:** Fullt REST-grensesnitt (denne dokumentasjonen)\n" -"- GraphiQL API:** Tilgjengelig på `/graphql/` med GraphiQL-grensesnitt for " -"interaktive spørringer\n" +"- GraphiQL API:** Tilgjengelig på `/graphql/` med GraphiQL-grensesnitt for interaktive spørringer\n" "\n" "## Autentisering\n" -"- Autentisering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-AUTH`-" -"overskriften i forespørslene dine i formatet `Bearer `.\n" +"- Autentisering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-AUTH`-overskriften i forespørslene dine i formatet `Bearer `.\n" "- Levetiden for tilgangstoken er {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "}. {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Levetiden for oppdateringstoken er {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} timer.\n" -"- Oppdateringstokener roteres automatisk og ugyldiggjøres etter bruk for økt " -"sikkerhet.\n" +"- Oppdateringstokener roteres automatisk og ugyldiggjøres etter bruk for økt sikkerhet.\n" "\n" "## Internasjonalisering (i18n)\n" -"- Angi `Accept-Language`-overskriften for å spesifisere ditt foretrukne " -"språk (f.eks. `Accept-Language: en-US`).\n" +"- Angi `Accept-Language`-overskriften for å spesifisere ditt foretrukne språk (f.eks. `Accept-Language: en-US`).\n" "- Tilgjengelige språk kan hentes fra endepunktet `/app/languages/`.\n" "- Alt brukerrettet innhold støtter flere språk uten videre.\n" "\n" @@ -250,8 +220,7 @@ msgstr "" "API-et støtter flere svarformater:\n" "- **JSON** (standard, camelCase-formatert)\n" "- XML** (legg til `?format=xml` eller angi `Accept: application/xml`)\n" -"- **YAML** (legg til `?format=yaml` eller angi `Accept: application/x-" -"yaml`)\n" +"- **YAML** (legg til `?format=yaml` eller angi `Accept: application/x-yaml`)\n" "\n" "## Helse og overvåking\n" "- Helsesjekker: `/health/`\n" @@ -260,18 +229,54 @@ msgstr "" "## Versjon\n" "Gjeldende API-versjon: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Hjem" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Meny" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Utstillingsvindu" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Dashbord" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Helse" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfigurer" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Brukere" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grupper" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produkter" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategorier" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Merkevarer" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogginnlegg" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Periodiske oppgaver" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Oppgavetavle" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Støtte" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.mo b/evibes/locale/pl_PL/LC_MESSAGES/django.mo index fdebfaa716bf9a7ac67393af6ea6a365415c51e3..478e4c75fedaf0657b5d1ebe03a6388ea4e636d0 100644 GIT binary patch delta 1653 zcmZ9LU1(fI6vt0$t+jTWTD#VoWHVOVv`v#n38+=DG!hHlBrCf?Ob{};JG(pkapyYs z-rn35Sp-GI$BQWVP<+z|p^z3VR!XbEm*R^L`c&HIYQYDwk{AEy?hQf@JNGwdKF*x; zpV==?Z_e~??c4qt!N$>s(SiY@SHPRw@PU2z5Yh53qATDN@bi0!_JYU2C&5$TQSeRh zIj{>p3SIzrfZu@FP8T!(`)vLO_&8CIZlZG#3vPiq@IIIacMSFq8U{Jg1jvD=GygSk z8vZQ!68Ij-`!9i<;0*h{g0tXb-~z~%EQ1_a zWxk*J?}N`^{8R7|@Y`(uGPnr;S~i|XnLIxNJ`5fP-+{{G;ME>Z`eYx`eoV|3`jRe# zoT&vT!4JSG@FK_w-2pk!-OT?B+zo#dL@3&c@(`PbKn&3Y$n!<;0Qfe@1-%RQI8YBA z-tZB~nSKtQ1}}iK;BAltj0qzAXc`}ub`fNymOvCsHINgHGXHCk3%dfcvcG^_z;7Av z2;4shxSI|919FA~(3S7@Ajli%L004~a0RS^Pk}#!T*+;a6TAlwfLsK+=^T(gR8EAA z&*PZ9p5I^ksE(rhEZPWr%CanWaGzr42>Tp%Zon-9Y))-Ls^Fv;iTEd z(D>iM)u&ejvhu^P;=}*6akK{w4>Yyo_#Q#yiurz@MoVq|?``{c5P?b)u$O5sJgLQp=;cluG8z%Z>$<=tI3}^=YTb#=hN9r zr6fw$ti^Oz$#&34+&$*SqN>ZbSnvXET%YEoZi^aD6(${_Ipu~lFFQ(@nm{JPF&$63 zagrZ={sm>VscJ`5q~G$X)G)3RZrE8>_JP%eW2>PP_{qxPN-y+0V*}z{X^!Zv35yzp zc11I^+DA~%hoi(Mv|EQxilUO|m6#Gboe)*yjs+r;ZXg09pq8V2Uj%YZ`IEHhD^V^N zQ&x&)rbU)^{odfE+{^!qI45mO)444T>0BydXraM%{uJ69fsvU%& zL#GZeL6;z+|6qe4q6mwA(5dJUlty$jgl<-szR$Kr4UC_eb!MJto_Br@-yB+At*^MD zXnX1H^n+WJ>chb@{?Ilt;Zy26HZYG?D^-gN*o4=x2XA91zQj7*z!p?BN-U_nAL^#Ve8(CMm=XWLAQ4%_ahw&61!FiO5 z+`$gKhdc2tHWOccVjvlAmfXfF+0cl@Qe8NN$MFp2QR5?&o35b*UPr0a50t=FltmI8 zM7hwpk{3|+8C;fs%rj`l%P6JyP!4*5+wnb0fX}!azo8`T(@Ig0;@g4Z8VM+$Nz=K{ z-zFE5Dod-U%Uk1pEGv0u^4&PIn3X(|ZFC7Nt(-2wBtc0wNdMEMI+D=V(hpp`_=cps z(pu^ANu|kS{kO>lm9Oxi-0$nuJ=0b;9yw&?+*zG*Y}Z6w6WxD8U+QC)GVZL&d8^e= zyw^3;9VTrYE2%>nH*Tl1YGiV9LQgpM!lD{sskh|s_LBaQfiWwd)G>BzySP$~TPdUM znC37Yu~QifT^l-y?F2z}{Nt&3Q&K1{r@AQ&C?mCMc TnVn0TjGec\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Nazwa projektu" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Nazwa firmy" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Numer telefonu firmy" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Stawka podatku w jurysdykcji Twojej firmy. Pozostaw 0, jeśli nie chcesz " +"przetwarzać podatków." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Klucz API kursu wymiany" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! NIE ZMIENIAJ !!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Używanie TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Używanie protokołu SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Nazwa użytkownika SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Hasło SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Adres nadawcy wiadomości e-mail" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Ile dni przechowujemy wiadomości od anonimowych użytkowników?" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Ile dni przechowujemy wiadomości od uwierzytelnionych użytkowników?" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Wyłączenie funkcji kupowania" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "Adres URL interfejsu API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Klucz API OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstrakcyjny klucz API" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Serwer proxy HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Jednostka do przechowywania danych reklamowych" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Jednostka do przechowywania danych analitycznych" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Zapisywanie odpowiedzi z interfejsów API dostawców" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Opcje ogólne" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Opcje prawne" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Opcje e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Opcje funkcji" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Opcje SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Opcje debugowania" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,57 +183,38 @@ msgstr "" "\n" "Witamy w dokumentacji eVibes.\n" "\n" -"eVibes to potężna platforma e-commerce, która umożliwia uruchomienie i " -"zarządzanie sklepem internetowym dowolnego rodzaju za pomocą zaledwie kilku " -"kliknięć.\n" +"eVibes to potężna platforma e-commerce, która umożliwia uruchomienie i zarządzanie sklepem internetowym dowolnego rodzaju za pomocą zaledwie kilku kliknięć.\n" "\n" "## Kluczowe funkcje\n" -"- Katalog produktów:** Zarządzanie szczegółami produktów, cenami, zapasami i " -"dostępnością w wielu kategoriach.\n" -"- **Zarządzanie zamówieniami:** Przetwarzanie zamówień, śledzenie realizacji " -"i sprawna obsługa zgłoszeń klientów.\n" -"- Uwierzytelnianie i autoryzacja:** Kompleksowe uwierzytelnianie " -"użytkowników za pomocą tokenów JWT i uprawnień opartych na rolach.\n" -"- Przetwarzanie płatności:** Integracja wielu bramek płatniczych i " -"bezpieczne zarządzanie transakcjami.\n" -"- Blog i zarządzanie treścią:** Tworzenie i zarządzanie wpisami na blogu " -"oraz treściami marketingowymi dla sklepu.\n" -"- Operacje B2B:** Dedykowane punkty końcowe dla transakcji między firmami i " -"zarządzania sprzedażą hurtową.\n" -"- Obsługa wielu języków:** Obsługa klientów na całym świecie dzięki pełnym " -"możliwościom internacjonalizacji (i18n).\n" -"- Integracje niestandardowe:** Rozszerzalna architektura API do integracji z " -"zewnętrznymi platformami i usługami.\n" -"- Analityka i raportowanie:** Generowanie szczegółowych raportów dotyczących " -"sprzedaży, zapasów i zachowań klientów.\n" -"- Aktualizacje w czasie rzeczywistym:** Uzyskaj dane na żywo o poziomach " -"zapasów, statusach zamówień i zmianach cen.\n" +"- Katalog produktów:** Zarządzanie szczegółami produktów, cenami, zapasami i dostępnością w wielu kategoriach.\n" +"- **Zarządzanie zamówieniami:** Przetwarzanie zamówień, śledzenie realizacji i sprawna obsługa zgłoszeń klientów.\n" +"- Uwierzytelnianie i autoryzacja:** Kompleksowe uwierzytelnianie użytkowników za pomocą tokenów JWT i uprawnień opartych na rolach.\n" +"- Przetwarzanie płatności:** Integracja wielu bramek płatniczych i bezpieczne zarządzanie transakcjami.\n" +"- Blog i zarządzanie treścią:** Tworzenie i zarządzanie wpisami na blogu oraz treściami marketingowymi dla sklepu.\n" +"- Operacje B2B:** Dedykowane punkty końcowe dla transakcji między firmami i zarządzania sprzedażą hurtową.\n" +"- Obsługa wielu języków:** Obsługa klientów na całym świecie dzięki pełnym możliwościom internacjonalizacji (i18n).\n" +"- Integracje niestandardowe:** Rozszerzalna architektura API do integracji z zewnętrznymi platformami i usługami.\n" +"- Analityka i raportowanie:** Generowanie szczegółowych raportów dotyczących sprzedaży, zapasów i zachowań klientów.\n" +"- Aktualizacje w czasie rzeczywistym:** Uzyskaj dane na żywo o poziomach zapasów, statusach zamówień i zmianach cen.\n" "\n" "## Dostępne API\n" "- **REST API:** Pełny interfejs RESTful (ta dokumentacja)\n" -"- API GraphQL:** Dostępne pod adresem `/graphql/` z interfejsem GraphiQL do " -"interaktywnych zapytań.\n" +"- API GraphQL:** Dostępne pod adresem `/graphql/` z interfejsem GraphiQL do interaktywnych zapytań.\n" "\n" "## Uwierzytelnianie\n" -"- Uwierzytelnianie jest obsługiwane za pomocą tokenów JWT. Dołącz token w " -"nagłówku `X-EVIBES-AUTH` swoich żądań w formacie `Bearer `.\n" +"- Uwierzytelnianie jest obsługiwane za pomocą tokenów JWT. Dołącz token w nagłówku `X-EVIBES-AUTH` swoich żądań w formacie `Bearer `.\n" "- Okres ważności tokenu dostępu wynosi {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Okres ważności tokenu odświeżania wynosi {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} godzin.\n" -"- Tokeny odświeżania są automatycznie obracane i unieważniane po użyciu w " -"celu zwiększenia bezpieczeństwa.\n" +"- Tokeny odświeżania są automatycznie obracane i unieważniane po użyciu w celu zwiększenia bezpieczeństwa.\n" "\n" "## Internacjonalizacja (i18n)\n" -"- Ustaw nagłówek `Accept-Language`, aby określić preferowany język (np. " -"`Accept-Language: en-US`).\n" +"- Ustaw nagłówek `Accept-Language`, aby określić preferowany język (np. `Accept-Language: en-US`).\n" "- Dostępne języki można pobrać z punktu końcowego `/app/languages/`.\n" -"- Cała zawartość skierowana do użytkownika obsługuje wiele języków od razu " -"po wyjęciu z pudełka.\n" +"- Cała zawartość skierowana do użytkownika obsługuje wiele języków od razu po wyjęciu z pudełka.\n" "\n" "## Formaty odpowiedzi\n" "API obsługuje wiele formatów odpowiedzi:\n" @@ -261,18 +229,54 @@ msgstr "" "## Wersja\n" "Aktualna wersja API: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Strona główna" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Witryna sklepowa" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Pulpit nawigacyjny" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Zdrowie" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfiguracja" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Użytkownicy" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grupy" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produkty" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategorie" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Marki" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposts" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Zadania okresowe" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Tablica zadań" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Wsparcie" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.mo b/evibes/locale/pt_BR/LC_MESSAGES/django.mo index afaa7001def9c74a0abd2c5f4f0efd17c773c7a8..7e2e2572b7577837304e8ec60b17010b1dbcf1ed 100644 GIT binary patch delta 1654 zcmZ9LU1(fI6vwAAt+jTW+9o#Iq?u}C+QuX*1xx(uM~J0tZNjEcQOIO>l3d-rvz@uO zCVsH^QjkIgFFpy1_#i3;AuafU6}$K#^euuu%MFg!c{?6TvLJvFlH)lT1ob#XA zwPQa_G}d=@zN4^VS|2Uhq|_7eW(Oba^E;H9-KNwRa5sL>4yAU&L-1ZW4iCar0qWgkKj+j zqwrNI`>#St@CNLJYfuvZ2@+cU3J2gnx!+J~FRS-5a2RfdlkjeM7D^?vPy*YwAKL!w za6jXh;GOVFd;S_chyP7`yoWMnz8`LegYX4Z9)_Kb?Ml75ODU33m-n?Qe-C!!Uxj1v zdpH9BhAdS>q%Vq$Ls8^7l*)=w=4as^7(=;|i|z4GAwPAUkHlYx4GHuI9SL*`ioaPa z^%UF=kHOPW61)T-fbT+)_BxdDCX~0Z1_$9UP$b`pJmjnnKvDK2l=Vd@%09oJ`9)!ml zt%DEJeUR2KW0N4| zQFV)T7m}b(coSEGI%yKS=zL`9x_BX4R1+pF%{${O*>8pN9`Dk6P^V^Qru39|%PZ=X zHPvJ(i+8xki+0ge_1St7xj3jZCaUTMPSq|SQDH#6+g2-%t)%57WOH3}jkI2OK2fqO&yn7;_SB%GSihM1 zC=gWgkti!J^&5wd>Y_CltbRmC`Gl^xcqq{?n>f*l)2LOpA?U;`+c2um1*=P?V$PXj zN$APaum0Y3t1vl*fM(IgLED<1M^P!>m(BlbN;g+C^``kz^FybmOcdLyu80b8;$78d zKlfkkeb%R3ht#;dqD5s@GR-e5HhXK|8-+Ssui2oh=p1E*fx+&Uq+G177!I#{8%#Dm z@bvB(Tu@G(x8hEsfs@mkVlqZ(C9(TAHTK4|oMZ F{R^GIMH&DA delta 1128 zcmY+?Pe@cj9Ki8kYFV1DT3KnivrD3BvJ@R8N-PS@%$3yW683b*Tyys=Z=a+=NC%<1 z7(BWabO<`tMY>27v6qVIpdHIohoJD(p$N*YE zn%GO!_21x}Hdbip-K=68{y^P0YSwK*z0(A4#gn1E$bl4tf#P*&B6>}RO2Yq&&ey%P zX!iQncpr1ZyDHurdlv6a1KC2=jkJ_f_5Sn-HToF!Z_(`cP&bDkG+TW`+)lAH@T-Yv z(UaL&^i4^{;!xk{kvycB~o8mFAi7M_l!-JsIk3Lcnvw4aDg$}u*R z^K9Oc^}efTFll`^ST;+|6#B5}b>9zw{s1o5w;ccg diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.po b/evibes/locale/pt_BR/LC_MESSAGES/django.po index 2d68e029..d926a207 100644 --- a/evibes/locale/pt_BR/LC_MESSAGES/django.po +++ b/evibes/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Nome do projeto" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Nome da empresa" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Número de telefone da empresa" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Taxa de imposto na jurisdição de sua empresa. Deixe 0 se você não quiser " +"processar impostos." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Chave da API de taxa de câmbio" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NÃO MUDE!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Porta SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Usar TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Usar SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Nome de usuário SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Senha SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "O endereço do remetente do e-mail" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Por quantos dias armazenamos mensagens de usuários anônimos" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Por quantos dias armazenamos mensagens de usuários autenticados" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Desativar a funcionalidade de compra" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL da API do OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Chave da API da OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Chave abstrata da API" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Uma entidade para armazenar dados de propaganda" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Uma entidade para armazenar dados analíticos" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Salvar respostas das APIs dos fornecedores" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Opções gerais" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Opções legais" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Opções de e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Opções de recursos" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Opções de SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Opções de depuração" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,59 +183,38 @@ msgstr "" "\n" "Bem-vindo à documentação do eVibes.\n" "\n" -"O eVibes é uma poderosa plataforma de comércio eletrônico que lhe permite " -"lançar e gerenciar uma loja on-line de qualquer tipo com apenas alguns " -"cliques.\n" +"O eVibes é uma poderosa plataforma de comércio eletrônico que lhe permite lançar e gerenciar uma loja on-line de qualquer tipo com apenas alguns cliques.\n" "\n" "## Principais recursos\n" -"- Catálogo de produtos:** Gerencie detalhes, preços, estoque e " -"disponibilidade de produtos em várias categorias.\n" -"- Gerenciamento de pedidos:** Processar pedidos, rastrear o atendimento e " -"lidar com as solicitações dos clientes de forma eficiente.\n" -"- Autenticação e autorização:** Autenticação abrangente de usuários com " -"tokens JWT e permissões baseadas em funções.\n" -"- Processamento de pagamentos: integre vários gateways de pagamento e " -"gerencie as transações com segurança.\n" -"- **Gerenciamento de blogs e conteúdo:** Crie e gerencie postagens de blogs " -"e conteúdo de marketing para sua loja.\n" -"- Operações B2B:** Pontos de extremidade dedicados para transações business-" -"to-business e gerenciamento de atacado.\n" -"- Suporte a vários idiomas:** Atenda a clientes em todo o mundo com recursos " -"completos de internacionalização (i18n).\n" -"- Integrações personalizadas:** Arquitetura de API extensível para " -"integração com plataformas e serviços externos.\n" -"- Análises e relatórios:** Gerar relatórios detalhados sobre vendas, estoque " -"e comportamento do cliente.\n" -"- Atualizações em tempo real:** Obtenha dados em tempo real sobre níveis de " -"estoque, status de pedidos e alterações de preços.\n" +"- Catálogo de produtos:** Gerencie detalhes, preços, estoque e disponibilidade de produtos em várias categorias.\n" +"- Gerenciamento de pedidos:** Processar pedidos, rastrear o atendimento e lidar com as solicitações dos clientes de forma eficiente.\n" +"- Autenticação e autorização:** Autenticação abrangente de usuários com tokens JWT e permissões baseadas em funções.\n" +"- Processamento de pagamentos: integre vários gateways de pagamento e gerencie as transações com segurança.\n" +"- **Gerenciamento de blogs e conteúdo:** Crie e gerencie postagens de blogs e conteúdo de marketing para sua loja.\n" +"- Operações B2B:** Pontos de extremidade dedicados para transações business-to-business e gerenciamento de atacado.\n" +"- Suporte a vários idiomas:** Atenda a clientes em todo o mundo com recursos completos de internacionalização (i18n).\n" +"- Integrações personalizadas:** Arquitetura de API extensível para integração com plataformas e serviços externos.\n" +"- Análises e relatórios:** Gerar relatórios detalhados sobre vendas, estoque e comportamento do cliente.\n" +"- Atualizações em tempo real:** Obtenha dados em tempo real sobre níveis de estoque, status de pedidos e alterações de preços.\n" "\n" "## APIs disponíveis\n" "- API REST:** Interface RESTful completa (esta documentação)\n" -"- API GraphQL:** Disponível em `/graphql/` com interface GraphiQL para " -"consultas interativas\n" +"- API GraphQL:** Disponível em `/graphql/` com interface GraphiQL para consultas interativas\n" "\n" "## Autenticação\n" -"- A autenticação é tratada por meio de tokens JWT. Inclua o token no " -"cabeçalho `X-EVIBES-AUTH` de suas solicitações no formato `Bearer " -"`.\n" +"- A autenticação é tratada por meio de tokens JWT. Inclua o token no cabeçalho `X-EVIBES-AUTH` de suas solicitações no formato `Bearer `.\n" "- O tempo de vida do token de acesso é {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- A vida útil do token de atualização é de {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} horas.\n" -"- Os tokens de atualização são automaticamente girados e invalidados após o " -"uso para aumentar a segurança.\n" +"- Os tokens de atualização são automaticamente girados e invalidados após o uso para aumentar a segurança.\n" "\n" "## Internacionalização (i18n)\n" -"- Defina o cabeçalho `Accept-Language` para especificar o idioma de sua " -"preferência (por exemplo, `Accept-Language: en-US`).\n" -"- Os idiomas disponíveis podem ser recuperados no ponto de extremidade `/app/" -"languages/`.\n" -"- Todo o conteúdo voltado para o usuário é compatível com vários idiomas " -"desde o início.\n" +"- Defina o cabeçalho `Accept-Language` para especificar o idioma de sua preferência (por exemplo, `Accept-Language: en-US`).\n" +"- Os idiomas disponíveis podem ser recuperados no ponto de extremidade `/app/languages/`.\n" +"- Todo o conteúdo voltado para o usuário é compatível com vários idiomas desde o início.\n" "\n" "## Formatos de resposta\n" "A API oferece suporte a vários formatos de resposta:\n" @@ -258,24 +224,59 @@ msgstr "" "\n" "## Saúde e monitoramento\n" "- Verificações de integridade: `/health/`\n" -"- Métricas do Prometheus (protegido por autenticação básica): `/prometheus/" -"`\n" +"- Métricas do Prometheus (protegido por autenticação básica): `/prometheus/`\n" "\n" "## Versão\n" "Versão atual da API: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Início" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Vitrine" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Painel de controle" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Saúde" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Configuração" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Usuários" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grupos" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produtos" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Categorias" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Marcas" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Postagens em blogs" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Tarefas periódicas" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Quadro de tarefas" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Suporte" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.mo b/evibes/locale/ro_RO/LC_MESSAGES/django.mo index 2716462838c51f6ffaecf2d2c1df578d1601bb7f..f7d93126a99d62e05c69ca80981619eb416676f9 100644 GIT binary patch delta 1656 zcmZ9LPiS049LJ}zf3*46)WoVux>IXf+q9|LLP}M{8f($SL^r`h5i{AHB-8G`dCYsy zCMmMY;z0xtE{fp69=udg#40Eriggtaxz&TGUPMpoNueNupWoY!N`LIU&zpI_nfd;{ zGyBS8uRc+`zH{^2iWsF0(b7#yJp|V~co1LQqSTq~N_`1$r$5l6)DCz6-T_a*`{1+i zUbqHtgYUzw@DgOY`lQ|es{Q>c>{F_y)_J*$gzK;y-hcyeYj10#At(zShO*GHcK=a$ zjQ%Nj9A1Dj|1&58ufomn8WiC_LY7v)!UFs&@7I(XBzus7gYZ^(3U$QEJ8p*S)DMc~uz@i{0J8Yt_;Q0Bb`*+P8^`KfPt?1DeTnkf657qNDW zZgB?`O9$a2a26s~y#=M>51>@?9h5t;4k=ds1Z9IipyceHdew7K3VCr4 z=Pxhk+5_jID6hk#@Lebq*P$%<1B~G>P%3@?o)#COtdqe_Q09=59~;O;%DNJgC&w&8 z#AgM^~l1nKem-PTmj)0R<{4vxBZ6nZ-hd3f4CHB+g-yz2( zg~)vq2ZtW!(Lo!f-5gxdJPz{QN4t|I=Xf_QkIR2{^lu+Hq34gp!B=g%Y_sGD46f8T z-2L^TlNG-d`y@@&$zY;#q8>M?UGl+MUVXIamehnvmKVGU<;HK_rCq^iaiUJo&d%tW z;8#}FX=^I!awF>TWR+E)g^f+e^rST}S$)5D`3GJ0(f(AQH&LonuW_qnlSHRx#U^8FF0r~; zoXj~pSri6ThReVAcJ_>Kn8IILVH-_IFelldS z%*)Nx;;Sk)>ru0wQbgm@?v=jj`1|)<7P-6}s<91S*gJ@sE>ja&T6Mu1o%oWoX|qml zBPty2D;i`lDQ+8U8y5>B+j8#`+h`Up)QWL%XI=C^QAukKl2aohT{ZS=E=9Ti=HvhD zWDC=_(OIX-gHNCx#rXEt^ua&M{(ca59w8ZCPtNr7!kY>{!F-Lf2gC LDsIiBq^f@a1GGp$ delta 1067 zcmY+?Pe>F|9Ki8kYGwY}RVynkomDGIA;cn~e@F>Slq>C)5QL2DSfjf$+w3fnSe&9rv$Odj_K2|GIhf~;ycd!$mU2v*<(9zhrTZ~=A0N7Mk;L(ACBP#Uon_hT~-U^SY!4YQ~L+zjWp!udUn z@qT&CKm&M%Tk#$0#+7jXA@mDgr8?iRrbgr(X=*^j`$Tr&BS&3yG~x>snn1$~dm{JdkzH_X zj*B!W-2e+zGpi;=zXj?7;bC%3Biq{m;e9( diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index af000cd9..5147fbb4 100644 --- a/evibes/locale/ro_RO/LC_MESSAGES/django.po +++ b/evibes/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Denumirea proiectului" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Denumirea societății" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Numărul de telefon al societății" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Cota de impozitare în jurisdicția companiei dumneavoastră. Lăsați 0 dacă nu " +"doriți să procesați taxele." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Cheie API pentru rata de schimb" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NU SCHIMBAȚI!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Gazdă SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Portul SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Utilizați TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Utilizați SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Nume utilizator SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Parola SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Adresa expeditorului e-mailurilor" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Câte zile păstrăm mesajele de la utilizatorii anonimi" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Câte zile stocăm mesajele de la utilizatorii autentificați" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Dezactivați funcționalitatea de cumpărare" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Cheie API OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Cheie API abstractă" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "O entitate pentru stocarea datelor privind publicitatea" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "O entitate pentru stocarea datelor analitice" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Salvați răspunsurile de la API-urile furnizorilor" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Opțiuni generale" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Opțiuni juridice" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Opțiuni de e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Caracteristici Opțiuni" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Opțiuni SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Opțiuni de depanare" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,66 +183,44 @@ msgstr "" "\n" "Bine ați venit la documentația eVibes.\n" "\n" -"eVibes este o platformă puternică de comerț electronic care vă permite să " -"lansați și să gestionați un magazin online de orice tip în doar câteva " -"clicuri.\n" +"eVibes este o platformă puternică de comerț electronic care vă permite să lansați și să gestionați un magazin online de orice tip în doar câteva clicuri.\n" "\n" "## Caracteristici principale\n" -"- **Product Catalog:** Gestionați detaliile produselor, prețurile, " -"inventarul și disponibilitatea în mai multe categorii.\n" -"- **Order Management:** Procesați comenzile, urmăriți îndeplinirea și " -"gestionați eficient cererile clienților.\n" -"- **Autentificare și autorizare:** Autentificare cuprinzătoare a " -"utilizatorilor cu token-uri JWT și permisiuni bazate pe roluri.\n" -"- **Payment Processing:** Integrați mai multe gateway-uri de plată și " -"gestionați tranzacțiile în siguranță.\n" -"- **Blog & Content Management:** Creați și gestionați postări pe blog și " -"conținut de marketing pentru magazinul dvs.\n" -"- **B2B Operations:** Puncte finale dedicate pentru tranzacțiile business-to-" -"business și gestionarea comerțului cu ridicata.\n" -"- **Suport multilingv:** Serviți clienții din întreaga lume cu capacități " -"complete de internaționalizare (i18n).\n" -"- **Integrații personalizate:** Arhitectură API extensibilă pentru " -"integrarea cu platforme și servicii externe.\n" -"- **Analytics & Reporting:** Generați rapoarte detaliate privind vânzările, " -"stocurile și comportamentul clienților.\n" -"- **Actualizări în timp real:** Obțineți date în timp real privind " -"nivelurile stocurilor, starea comenzilor și modificările prețurilor.\n" +"- **Product Catalog:** Gestionați detaliile produselor, prețurile, inventarul și disponibilitatea în mai multe categorii.\n" +"- **Order Management:** Procesați comenzile, urmăriți îndeplinirea și gestionați eficient cererile clienților.\n" +"- **Autentificare și autorizare:** Autentificare cuprinzătoare a utilizatorilor cu token-uri JWT și permisiuni bazate pe roluri.\n" +"- **Payment Processing:** Integrați mai multe gateway-uri de plată și gestionați tranzacțiile în siguranță.\n" +"- **Blog & Content Management:** Creați și gestionați postări pe blog și conținut de marketing pentru magazinul dvs.\n" +"- **B2B Operations:** Puncte finale dedicate pentru tranzacțiile business-to-business și gestionarea comerțului cu ridicata.\n" +"- **Suport multilingv:** Serviți clienții din întreaga lume cu capacități complete de internaționalizare (i18n).\n" +"- **Integrații personalizate:** Arhitectură API extensibilă pentru integrarea cu platforme și servicii externe.\n" +"- **Analytics & Reporting:** Generați rapoarte detaliate privind vânzările, stocurile și comportamentul clienților.\n" +"- **Actualizări în timp real:** Obțineți date în timp real privind nivelurile stocurilor, starea comenzilor și modificările prețurilor.\n" "\n" "## API-uri disponibile\n" "- **REST API:** Interfață RESTful completă (această documentație)\n" -"- **GraphQL API:** Disponibil la `/graphql/` cu interfața GraphiQL pentru " -"interogări interactive\n" +"- **GraphQL API:** Disponibil la `/graphql/` cu interfața GraphiQL pentru interogări interactive\n" "\n" "## Autentificare\n" -"- Autentificarea este gestionată prin jetoane JWT. Includeți tokenul în " -"antetul `X-EVIBES-AUTH` al cererilor dvs. în formatul `Bearer " -"`.\n" +"- Autentificarea este gestionată prin jetoane JWT. Includeți tokenul în antetul `X-EVIBES-AUTH` al cererilor dvs. în formatul `Bearer `.\n" "- Durata de viață a jetonului de acces este {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Durata de viață a jetonului de reînnoire este de {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} ore.\n" -"- Jetoanele de reîmprospătare sunt rotite automat și invalidate după " -"utilizare pentru o securitate sporită.\n" +"- Jetoanele de reîmprospătare sunt rotite automat și invalidate după utilizare pentru o securitate sporită.\n" "\n" "## Internaționalizare (i18n)\n" -"- Setați antetul `Accept-Language` pentru a specifica limba preferată (de " -"exemplu, `Accept-Language: en-US`).\n" -"- Limbile disponibile pot fi preluate de la punctul final `/app/languages/" -"`.\n" -"- Toate conținuturile destinate utilizatorilor acceptă din start mai multe " -"limbi.\n" +"- Setați antetul `Accept-Language` pentru a specifica limba preferată (de exemplu, `Accept-Language: en-US`).\n" +"- Limbile disponibile pot fi preluate de la punctul final `/app/languages/`.\n" +"- Toate conținuturile destinate utilizatorilor acceptă din start mai multe limbi.\n" "\n" "## Formate de răspuns\n" "API acceptă mai multe formate de răspuns:\n" "- **JSON** (implicit, formatat camelCase)\n" "- **XML** (adăugați `?format=xml` sau setați `Accept: application/xml`)\n" -"- **YAML** (adăugați `?format=yaml` sau setați `Accept: application/x-" -"yaml`)\n" +"- **YAML** (adăugați `?format=yaml` sau setați `Accept: application/x-yaml`)\n" "\n" "## Sănătate și monitorizare\n" "- Verificări de sănătate: `/health/`\n" @@ -264,18 +229,54 @@ msgstr "" "## Versiune\n" "Versiunea curentă a API: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Acasă" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Meniu" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Vitrină" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Tablou de bord" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Sănătate" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Configurare" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Utilizatori" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grupuri" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produse" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Categorii" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Mărci" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogposturi" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Sarcini periodice" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Tablou de sarcini" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Sprijin" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.mo b/evibes/locale/ru_RU/LC_MESSAGES/django.mo index 81a4ec1c2618a07c84500d8924ce029c4902e3e2..4568ee84b81c5f11b8702fdf591cb0beffd86739 100644 GIT binary patch delta 1819 zcmZXTUu+ab9LL8(L8@&LIYB8hDCOGHmTE|7(1ZvE2^Oigga=a7<+^Q8+uO_Toq)z1 zrB)@apl%F_Q5zE<CzHSlC&A7=GI9}Mx;M13(D5?}oMriU>&x!upq?9A`? z{r+YyeCfuC+^r3(KT@<^Jas&odz5+#E?4lP6;~;BvP!8r_#oq0jZ*7jBYX(%gAMRS zxC6cp*TG4+23~<|SNZaIq5Sz41zv&A!5^ShYFpz3CbmEhtI$sC>tlC+=*#;1%3k`fj+lZ_#TuBdKrzs3c%4YP_Pv<{^j;@GyCKPxs?#rEmm-D%$&b~A%+HrNgQ zWFl;-zR`SO$Qwv|K_*ZKd?(cxsDn<%9q|05OV>;FCkNECPB3`NbNs&Wx9Y?u-^->0 zb-25`Q+N8_nX~G!>kMTE!&Hs8x5FK9hV-#?Ch4UDb<{}?>3*_m&(5f$ZYrx@aE4v& z^=p*qgg2aaQfI?h?GsPBe$wkpCUmzGyc(#^K`-U%RCf53>)*9nk+v_J$OK_;ZEr4{ zPJ4bv$u6sr-Wl!VK_^rCm8_o(2r7Cc%2_Y#-$~l4J6z{ASGVb;{h<52R6L_kJE@G$ zc$#V@+#t{y=ZqV)s^fvHySh3oyF0psJ}Uj0-)n1PxyvSRmP|1kF-2{rwV5&tretPJ zJ{nWzgXo+om_;)ijVtppbLSb(m=e=PQgb?+7o(_cu(kOrWCbiPqMm&_E2 f@|+y!6OE%rIPqUS#n$krhP@SLGSu5+6-D(A66OyY delta 1109 zcmY+?Pe>F|9Ki9Hf6LNUODoN7Ge3-JmCXK#rzkwk20@4P)UEIsN|(OBb%c8Go6mc1=KcGZbz*Y>fzM7ySAH2j8bTFAhloP5-vH>2Pz&KvQRNv0HW|RzsP%`uY1Nanca1G_E zwox*X%YDiGUW`je9ThgG8n6+&Q5JrV98@i!+}%ek!gbdzBq7Ov2a;nBp=`n+{2`Q1ULZrJLUQ8nnxNX^N zrdyW`{9ELoQd#rMsh+HIqpHh{_IIB&hhu$4IAX`F?wHl%KWE&or4_Pbeb%tv$X?ZJ zIbB|B$cmVQMq4=6Zx2OPQ%6U;(H^l!MpYA^>U$oa9`rQTUp4y&jb26@cJfQrYKAPs z?lqXq=(a;)b7=IxK2{oFUH#K@T36>5>$cp^>X;p|m}4lWg2Umk9f_$9GkT}XHX}Xi zdekz4!Iq>QEy4LfUS5HotNdCt\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Название проекта" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Название компании" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Номер телефона компании" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Ставка налога в юрисдикции вашей компании. Оставьте 0, если вы не хотите " +"обрабатывать налоги." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Ключ API обменного курса" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!НЕ МЕНЯЙТЕ!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP-хост" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Порт SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Используйте TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Используйте SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Имя пользователя SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Пароль SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Адрес отправителя электронного письма" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Сколько дней мы храним сообщения от анонимных пользователей" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Сколько дней мы храним сообщения от аутентифицированных пользователей" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Отключить функцию покупки" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL-адрес API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Ключ API OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Абстрактный ключ API" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP-прокси" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Устройство для хранения данных о рекламе" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Сущность для хранения аналитических данных" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Сохраняйте ответы от API поставщиков" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Общие параметры" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Юридические возможности" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Параметры электронной почты" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Особенности Опции" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Параметры SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Параметры отладки" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,64 +183,44 @@ msgstr "" "\n" "Добро пожаловать в документацию eVibes.\n" "\n" -"eVibes - это мощная платформа для электронной коммерции, которая позволяет " -"запустить и управлять интернет-магазином любого типа всего за несколько " -"кликов.\n" +"eVibes - это мощная платформа для электронной коммерции, которая позволяет запустить и управлять интернет-магазином любого типа всего за несколько кликов.\n" "\n" "## Ключевые особенности.\n" -"- **Каталог товаров:** Управление информацией о товарах, ценами, запасами и " -"наличием товаров в нескольких категориях.\n" -"- **Управление заказами:** Обработка заказов, отслеживание выполнения и " -"эффективная обработка запросов клиентов.\n" -"- **Аутентификация и авторизация:** Комплексная аутентификация пользователей " -"с помощью JWT-токенов и ролевых разрешений.\n" -"- **Обработка платежей:** Интеграция нескольких платежных шлюзов и " -"безопасное управление транзакциями.\n" -"- **Управление блогом и контентом:** Создание и управление записями в блоге " -"и маркетинговым контентом для вашего магазина.\n" -"- **B2B-операции:** Выделенные конечные точки для транзакций между " -"бизнесменами и управления оптовыми продажами.\n" -"- **Мультиязыковая поддержка:** Обслуживайте клиентов по всему миру, " -"используя возможности полной интернационализации (i18n).\n" -"- **Заказные интеграции:** Расширяемая архитектура API для интеграции с " -"внешними платформами и сервисами.\n" -"- **Аналитика и отчетность:** Генерируйте подробные отчеты о продажах, " -"запасах и поведении клиентов.\n" -"- **Обновления в режиме реального времени:** Получайте данные об уровне " -"запасов, состоянии заказов и изменениях цен в режиме реального времени.\n" +"- **Каталог товаров:** Управление информацией о товарах, ценами, запасами и наличием товаров в нескольких категориях.\n" +"- **Управление заказами:** Обработка заказов, отслеживание выполнения и эффективная обработка запросов клиентов.\n" +"- **Аутентификация и авторизация:** Комплексная аутентификация пользователей с помощью JWT-токенов и ролевых разрешений.\n" +"- **Обработка платежей:** Интеграция нескольких платежных шлюзов и безопасное управление транзакциями.\n" +"- **Управление блогом и контентом:** Создание и управление записями в блоге и маркетинговым контентом для вашего магазина.\n" +"- **B2B-операции:** Выделенные конечные точки для транзакций между бизнесменами и управления оптовыми продажами.\n" +"- **Мультиязыковая поддержка:** Обслуживайте клиентов по всему миру, используя возможности полной интернационализации (i18n).\n" +"- **Заказные интеграции:** Расширяемая архитектура API для интеграции с внешними платформами и сервисами.\n" +"- **Аналитика и отчетность:** Генерируйте подробные отчеты о продажах, запасах и поведении клиентов.\n" +"- **Обновления в режиме реального времени:** Получайте данные об уровне запасов, состоянии заказов и изменениях цен в режиме реального времени.\n" "\n" "## Доступные API\n" "- **REST API:** Полный REST-интерфейс (данная документация)\n" -"- **GraphQL API:** Доступен по адресу `/graphql/` с интерфейсом GraphiQL для " -"интерактивных запросов\n" +"- **GraphQL API:** Доступен по адресу `/graphql/` с интерфейсом GraphiQL для интерактивных запросов\n" "\n" "## Аутентификация\n" -"- Аутентификация осуществляется с помощью JWT-токенов. Включите токен в " -"заголовок `X-EVIBES-AUTH` ваших запросов в формате `Bearer <ваш_токен>`.\n" +"- Аутентификация осуществляется с помощью JWT-токенов. Включите токен в заголовок `X-EVIBES-AUTH` ваших запросов в формате `Bearer <ваш_токен>`.\n" "- Срок действия токена доступа составляет {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Время жизни токена обновления составляет {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} часов.\n" -"- Для повышения безопасности маркеры доступа автоматически поворачиваются и " -"аннулируются после использования.\n" +"- Для повышения безопасности маркеры доступа автоматически поворачиваются и аннулируются после использования.\n" "\n" "## Интернационализация (i18n)\n" -"- Укажите в заголовке `Accept-Language` предпочтительный язык (например, " -"`Accept-Language: en-US`).\n" +"- Укажите в заголовке `Accept-Language` предпочтительный язык (например, `Accept-Language: en-US`).\n" "- Доступные языки можно получить из конечной точки `/app/languages/`.\n" -"- Весь контент, предназначенный для пользователей, изначально поддерживает " -"несколько языков.\n" +"- Весь контент, предназначенный для пользователей, изначально поддерживает несколько языков.\n" "\n" "## Форматы ответов\n" "API поддерживает несколько форматов ответов:\n" "- **JSON** (по умолчанию, с форматированием в camelCase)\n" "- **XML** (добавьте `?format=xml` или установите `Accept: application/xml`)\n" -"- **YAML** (добавьте `?format=yaml` или установите `Accept: application/x-" -"yaml`)\n" +"- **YAML** (добавьте `?format=yaml` или установите `Accept: application/x-yaml`)\n" "\n" "## Здоровье и мониторинг\n" "- Проверка здоровья: `/health/`\n" @@ -262,18 +229,54 @@ msgstr "" "## Версия\n" "Текущая версия API: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Главная" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Меню" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Витрина" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Приборная панель" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Здоровье" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Конфигурация" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Пользователи" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Группы" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Продукция" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Категории" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Бренды" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Записи в блогах" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Периодические задания" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Доска задач" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Поддержка" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.mo b/evibes/locale/sv_SE/LC_MESSAGES/django.mo index f49eebb813860706aab5957cbcdf2004f9226b1d..2fe48c715cab851abe4419f85c260958367644d1 100644 GIT binary patch delta 1628 zcmZ9LU1(fI6vvPKv^8l=&01@-+tD`GwkD}kskG8!)U>s!jbsBt5i;33yF2dPnPq0~ zHt}l_AEfwr5kv}t^;AX*e3)a+BCFRd>=NMH2P`XC5`i2l#ryDuGf?r+X~oH^%z zX4g+%o$B1)x#>efJB&Vx9_}GJ0p8ev585{yi7sv@`WAcuc3}t6{oq0HLGU>EIQR;< zAAAGc27Ur=0Y3wAoK|!DyL^2e946|}4GeZ;!)A9w-eOfG`# zSmn0Q?YF^4F#iF#75pM!{~DZ!{e3=PK$^T>1UG|Y;A>F%F!)~wDP7)4gdbfl_9DFk zvb_o(1iRoq@D4Zt4wrh0lt5NwEVqw;WeR-T9;IH6|;6CUz0&0-o$vYrR`#Fdt=}QpF&<`MfbPFHe|0l=+Y!y8v$3QN@ zB*^!j6sSK>oW%r7{VK?rFM^MO3CNON0l5U9f@N?O)*J9Tq_-o5_t~b_U3@ z=YY8Jel9aB$?q>a$S;^B=4iPIbbd6PC6b_B=qwpGeym&;Rtf^qM)WcCetR?@uriz+ zw*%<=(K$(0ip#@^jXsMH|I=93yBpV%+aYvT;~{ibhijO%wZAruY%d%a3zIEpn<~^* z;wM3;E9v;)k55d+w$`#fc$#w3M4q0PLDj6&3PWqEx<)TZUthG+Md_Wv$}VSe)(YIfLTGpZ(IaiJBoHJ;8(9g8Y%6*ilp^U5UjvTQ10s{)aTify)} zSxyT>Pd=rbwvn!gvh)p4vvq5fFiCS!xx01~u8opP@ae+PLMLgptP8}avKTR15)L^C zZN%$|(;iMa9`>?q6W70VLd+=HR^o`z*@B3yIS|ApX@Uq=K&^`MUIe+M`~=N=CFbU4 zGL~oNm=008wLgY_8+e*UtZ5T>S8BDsj_3M1Iy%?W@vQN|B~4`ll2&ngbM(F4ryUYd zF4J=yce0+{mDtPlQt|zfmk@uXeM1UJtelZSx6^-%m*PL)oK%=Yx- zz3^DmRqRjSD(&5tsnuZXKdmDU^?O4)WLx!Nd3|?pv=@3LUckKHDHdsIi x)?H~D3B^#-D1pFGxvk?^EUG%*PAmnkhc7ol&zW|2#YCBA{V{YK=r2g8=zm#fJ3;^e delta 1122 zcmY+?Pe>GD7{~D^wKUUKt<2QcF|GWI1QC{D7+7MK!fr>g(Vf*@cW1WUSJR+`D56t` zp;H7MJVb{sl0}!O?NUSs&m|N=hr)ARs_!$bP%pfG-dE;*pJ#qMk50etUs|szxhISR z%tmI{7Lgu2S;Qa4PfV7J{K8%AW0fLRxPY~I2ix!=w&Gi?#tqzuvQvbm)Z-p(Lp|S* zA(15+Wx@S2fhCy4qv&BTE~6g!gxbJH!6Htxlv-@UgV=zBxC3q6j%m~et`zpS3j4d* zOnrI4LK}FArT7l@;96n-vEWx6C!HVohXcdBW)05`6Pq?Rj=H~$?RXPg@Cj;TYq%db zP?M`*Q%`+qVWH9V<8F+iHk80(GS#9C<{pp(b@7 z_1?#Y{Zm}hH+{oGJO6-(@H1*;W!$nAYf<-&sL^&5Jca}kd^->n(HGD(ET$IU9NL%` z*P*otLBEeB(eF&-;jZ9vO=26fjHyEt(BgZU+H5m(bMQ+@9aEdsLEphQR1xfm7xgFA zp^^VPG&w0>c~KlHZ?)Pc?ObB2+nzHsRwnBiXUaIS_7m2n9(HNR%s6xYdgUws{m#j- z<2qS8WsPP`!gF&n6pfBqV_9!uQHFTbzZyF1r$R%$=j}wwigViXf+yvIopvlQZgH74 z<)t&WyZGP#sFb9x|2=fX@2qO@N2?|}jhA(}!!;6_%VfN)k*J-Uo%HN%OfKdeD-szA zjE+QBI;y`__-Dg6S_V?7bbi@&ZOcv>C+pfKF(0(qO$lw&N&8>IxBcr)U3F*jt69g` z(~ikmuAO#;H%U6P#(&n-=a*VxzsGWq&n~7+JiqGZxJ@D^ze@2;W;zi!Ib+YKY#DIp NDHsdd*<90-`~|j=x6S|n diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.po b/evibes/locale/sv_SE/LC_MESSAGES/django.po index cb58f34c..46df1beb 100644 --- a/evibes/locale/sv_SE/LC_MESSAGES/django.po +++ b/evibes/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Projektets namn" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Företagets namn" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "Telefonnummer till företaget" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Skattesats i ditt företags jurisdiktion. Lämna 0 om du inte vill behandla " +"skatter." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "API-nyckel för växelkurs" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!ÄNDRA INTE!!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP-värd" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Använd TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Använd SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP-användarnamn" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP-lösenord" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Adressen till e-postmeddelandets avsändare" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Hur många dagar vi lagrar meddelanden från anonyma användare" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "Hur många dagar vi lagrar meddelanden från autentiserade användare" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Inaktivera köpfunktionalitet" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API-nyckel" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Abstrakt API-nyckel" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "En enhet för lagring av annonseringsdata" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "En enhet för lagring av analysdata" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Spara svar från leverantörers API:er" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Allmänna alternativ" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Juridiska alternativ" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Alternativ för e-post" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Funktioner Alternativ" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO-alternativ" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Alternativ för felsökning" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +175,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,84 +183,100 @@ msgstr "" "\n" "Välkommen till eVibes dokumentation.\n" "\n" -"eVibes är en kraftfull e-handelsplattform som gör att du kan starta och " -"hantera en onlinebutik av alla slag med bara några få klick.\n" +"eVibes är en kraftfull e-handelsplattform som gör att du kan starta och hantera en onlinebutik av alla slag med bara några få klick.\n" "\n" "## Viktiga funktioner\n" -"- Produktkatalog:** Hantera produktinformation, priser, lager och " -"tillgänglighet i flera kategorier.\n" -"- ** Orderhantering:** Behandla beställningar, spåra uppfyllande och hantera " -"kundförfrågningar effektivt.\n" -"- Autentisering och auktorisering: ** Omfattande användarautentisering med " -"JWT-tokens och rollbaserade behörigheter.\n" -"- **Betalningshantering:** Integrera flera betalningsgateways och hantera " -"transaktioner på ett säkert sätt.\n" -"- **Blogg & Content Management:** Skapa och hantera blogginlägg och " -"marknadsföringsinnehåll för din butik.\n" -"- **B2B Operations:** Dedikerade slutpunkter för transaktioner mellan " -"företag och grossisthantering.\n" -"- Stöd för flera språk: ** Betjäna kunder över hela världen med fullständiga " -"internationaliseringsfunktioner (i18n).\n" -"- **Kundanpassade integrationer:** Utökad API-arkitektur för integrering med " -"externa plattformar och tjänster.\n" -"- **Analys och rapportering:** Generera detaljerade rapporter om " -"försäljning, lager och kundbeteende.\n" -"- Uppdateringar i realtid: ** Få live-data om lagernivåer, orderstatus och " -"prisändringar.\n" +"- Produktkatalog:** Hantera produktinformation, priser, lager och tillgänglighet i flera kategorier.\n" +"- ** Orderhantering:** Behandla beställningar, spåra uppfyllande och hantera kundförfrågningar effektivt.\n" +"- Autentisering och auktorisering: ** Omfattande användarautentisering med JWT-tokens och rollbaserade behörigheter.\n" +"- **Betalningshantering:** Integrera flera betalningsgateways och hantera transaktioner på ett säkert sätt.\n" +"- **Blogg & Content Management:** Skapa och hantera blogginlägg och marknadsföringsinnehåll för din butik.\n" +"- **B2B Operations:** Dedikerade slutpunkter för transaktioner mellan företag och grossisthantering.\n" +"- Stöd för flera språk: ** Betjäna kunder över hela världen med fullständiga internationaliseringsfunktioner (i18n).\n" +"- **Kundanpassade integrationer:** Utökad API-arkitektur för integrering med externa plattformar och tjänster.\n" +"- **Analys och rapportering:** Generera detaljerade rapporter om försäljning, lager och kundbeteende.\n" +"- Uppdateringar i realtid: ** Få live-data om lagernivåer, orderstatus och prisändringar.\n" "\n" "## Tillgängliga API:er\n" "- **REST API:** Fullständigt RESTful-gränssnitt (denna dokumentation)\n" -"- **GraphQL API:** Tillgängligt på `/graphql/` med GraphiQL-gränssnitt för " -"interaktiva frågor\n" +"- **GraphQL API:** Tillgängligt på `/graphql/` med GraphiQL-gränssnitt för interaktiva frågor\n" "\n" "## Autentisering\n" -"- Autentisering hanteras via JWT-tokens. Inkludera token i `X-EVIBES-AUTH`-" -"huvudet för dina förfrågningar i formatet `Bearer `.\n" +"- Autentisering hanteras via JWT-tokens. Inkludera token i `X-EVIBES-AUTH`-huvudet för dina förfrågningar i formatet `Bearer `.\n" "- Åtkomsttokenens livstid är {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Uppdateringstokenens livslängd är {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} timmar.\n" -"- Uppdateringstokens roteras automatiskt och ogiltigförklaras efter " -"användning för ökad säkerhet.\n" +"- Uppdateringstokens roteras automatiskt och ogiltigförklaras efter användning för ökad säkerhet.\n" "\n" "## Internationalisering (i18n)\n" -"- Ange önskat språk i rubriken `Accept-Language` (t.ex. `Accept-Language: en-" -"US`).\n" +"- Ange önskat språk i rubriken `Accept-Language` (t.ex. `Accept-Language: en-US`).\n" "- Tillgängliga språk kan hämtas från slutpunkten `/app/languages/`.\n" "- Allt innehåll som vänder sig till användare stöder flera språk direkt.\n" "\n" "## Svarsformat\n" "API:et stöder flera olika svarsformat:\n" "- **JSON** (standard, camelCase-formaterad)\n" -"- **XML** (lägg till `?format=xml` eller ställ in `Accept: application/" -"xml`)\n" -"- **YAML** (lägg till `?format=yaml` eller ställ in `Accept: application/x-" -"yaml`)\n" +"- **XML** (lägg till `?format=xml` eller ställ in `Accept: application/xml`)\n" +"- **YAML** (lägg till `?format=yaml` eller ställ in `Accept: application/x-yaml`)\n" "\n" "## Hälsa och övervakning\n" "- Hälsokontroller: `/hälsa/`\n" -"- Prometheus-mätvärden (skyddade med grundläggande autentisering): `/" -"prometheus/`\n" +"- Prometheus-mätvärden (skyddade med grundläggande autentisering): `/prometheus/`\n" "\n" "## Version\n" "Aktuell API-version: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Hem" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Meny" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Skyltfönster" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Instrumentpanel" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Hälsa" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfig" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Användare" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Grupper" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Produkter" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategorier" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Brands" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blogginlägg" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Periodiska uppgifter" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Uppgiftstavla" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Stöd" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.mo b/evibes/locale/th_TH/LC_MESSAGES/django.mo index 2c6594b635b0453667f18b84bf69a710640f3af9..bad5ee603e933ded37383aead11ee28e339302d7 100644 GIT binary patch delta 1829 zcmZXTU2IfE6o99QsMJ!x7LXQt`4ef`ZGkEVL=+T}EYOA$VhDlD?rpo!?%mwGi!J`F zs0jjUG#8?X5m#&k2?kw=v++UggNX_HVq!EVI6nLHK%y}*CVpr35)z$c?l`^(JfRpJ%vNThPN~)K$^S8Q^8t;$8X-bvU6&815a1}PdzhE<*)L2W@3MEhiN}%poUJJXCH^BSg zlTiFGK`C$?PK4h=Dg1j#X!R>>gMVAOq*M#mEhyUIt#AXZhg+eXWG9rsUMz>P{4|`0 z{usOkUWoTE!|lkQ#rkHBDf@Ha&2SOiMVC9^=cSoS9ht7w3N|*iE7b{~fnD%JxC8zK zhu})?ND{sWaZz8wS@4Hge=U}qmMXOceFFBvr{H4v4SWFp38i!QB`uwZt)Wv8S+pip^SQ_ zT(cZN-k*I`@`5F?6eGi7%A=77)W+nN?4tzsvC1jsQOfE0G1MaF^)WwQOoj5`WJvqv z?~wO2jVaxbx6pb&ANkX`y8n&FSi|+JyO`2aIi*~c9hE;OG)-<^6w9F z%!g`YUtf>Y6Zj*eYNO{46$Yc+6n|yP8*qo5t@%RM&xLBUn;mlc$?Eu4qc(fFqT1pP zdye1lP>GZFhx2Z3G-_^Kw%iM{ekPlC`rL4TsCowdoaf|m8G027lm3kz~s9y}OCrvsj&pqHdT~5|+I2k{;xZphD z<_b>1cj#8y3qz;ij(A~GZ4W(X+qRTtUuv5$pvs`~d*kTr6>l2-y3sEf{l3v38(lUU z&6uekHu{3mhm@%vvZ^yipEUZoslKG5HBGZtD>khM8!ReDpN}mFR(+AJn(J|+kJc`@jyr2)o6cWexwtr8Jr6*RHvjKebH!YtweRn)Qq=m z{7Xiku<1WCIx_mT$ZcZI0MT{R_vX6utle delta 1164 zcmY+?OKeP07{Kwb^={QvQMA;pM_O&C(}snJU?b{TG8MIux@~XM)=ckYIt>-lc*Q#w zCn6%^nOKMfBiymUlITV(EReIXkPr(iHsb$HFR7E9`JM01{mwb}JLgCD&5n^zWfLz6 zZ83cTy`exPhHDD>q5Z`EB9UJ>i@3W)q!bTgIiA5FHR!=$t|qFQPh%s!3+2sujBa!k#*P*6{*4mYTh}l#wW;{ z@*Z2TuyO2Yx8Q8zUR;Pra6}(mWv~Pv;2wO3^RO{CHsMCp()M8qo(wfeLGpJ8^2ed` z=`lHUUF2`mJ5dw{WvF+J`!OPV&vf!d^kTYx@nrf`y0!^)U6hLFk43-mZ;LR{jZO+5 zXf^Z>O%G$Oq8_O>y{zM#-YF@{KAR9JTI$qxx`TaPQFkcQ>!i|t#_P&>-OE=y`(i{% zFVpJ{nNKAz&6^pWRo;M?b`wr(D%0l=3`$E|+YV<(+CMlfExc+DMQThU(z0rs+m~>9 z$aehvo3h!>dE2(evvo5MSD1LTJiDQxra%W}Hn?nqhc\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "ชื่อของโครงการ" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "ชื่อบริษัท" @@ -30,153 +26,144 @@ msgid "Phone number of the company" msgstr "หมายเลขโทรศัพท์ของบริษัท" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"อัตราภาษีในเขตอำนาจศาลของบริษัทของคุณ. ให้เป็น 0 " +"หากคุณไม่ต้องการดำเนินการภาษี." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "คีย์ API อัตราแลกเปลี่ยน" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!ห้ามเปลี่ยนแปลง!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "โฮสต์ SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "พอร์ต SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "ใช้ TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "ใช้ SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "ชื่อผู้ใช้ SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "รหัสผ่าน SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "ที่อยู่ของผู้ส่งอีเมล" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "เราเก็บข้อความจากผู้ใช้ที่ไม่ระบุตัวตนไว้กี่วัน" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "เราเก็บข้อความจากผู้ใช้ที่ผ่านการยืนยันตัวตนไว้กี่วัน" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "ปิดการใช้งานฟังก์ชันการซื้อ" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "URL ของ API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "คีย์ API ของ OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "คีย์ API แบบนามธรรม" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP พร็อกซี" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "หน่วยงานสำหรับเก็บข้อมูลโฆษณา" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "หน่วยงานสำหรับเก็บข้อมูลการวิเคราะห์" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "บันทึกการตอบกลับจาก API ของผู้ขาย" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "ตัวเลือกทั่วไป" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "ทางเลือกทางกฎหมาย" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "ตัวเลือกอีเมล" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "คุณสมบัติ ตัวเลือก" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "ตัวเลือก SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "ตัวเลือกการแก้ไขข้อผิดพลาด" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,67 +175,73 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" msgstr "" "\n" -"ยินดีต้อนรับสู่เอกสารคู่มือของ eVibes eVibes " -"เป็นแพลตฟอร์มอีคอมเมิร์ซที่ทรงพลังซึ่งช่วยให้คุณสามารถเปิดตัวและจัดการร้านค้าออนไลน์ได้ทุกประเภทเพียงแค่ไม่กี่คลิก " -"## คุณสมบัติหลัก - **แคตตาล็อกสินค้า:** จัดการรายละเอียดสินค้า ราคาสินค้า สินค้าคงคลัง " -"และความพร้อมจำหน่ายในหลายหมวดหมู่ - **การจัดการคำสั่งซื้อ:** ประมวลผลคำสั่งซื้อ " -"ติดตามการจัดส่ง และจัดการคำขอของลูกค้าอย่างมีประสิทธิภาพ\n" -"- **การตรวจสอบสิทธิ์และการอนุญาต:** การตรวจสอบสิทธิ์ผู้ใช้อย่างครอบคลุมด้วยโทเค็น JWT " -"และสิทธิ์ตามบทบาท - **การประมวลผลการชำระเงิน:** " -"ผสานรวมเกตเวย์การชำระเงินหลายช่องทางและจัดการธุรกรรมอย่างปลอดภัย - " -"**การจัดการบล็อกและเนื้อหา:** สร้างและจัดการโพสต์บล็อกและเนื้อหาการตลาดสำหรับร้านค้าของคุณ " -"- **การดำเนินงาน B2B:** " -"จุดเชื่อมต่อเฉพาะสำหรับการทำธุรกรรมระหว่างธุรกิจและการจัดการขายส่ง\n" -"- **รองรับหลายภาษา:** " -"ให้บริการลูกค้าทั่วโลกด้วยความสามารถในการรองรับภาษาสากลอย่างเต็มรูปแบบ (i18n) - " -"**การผสานรวมแบบกำหนดเอง:** สถาปัตยกรรม API " -"ที่สามารถขยายได้สำหรับการผสานรวมกับแพลตฟอร์มและบริการภายนอก - **การวิเคราะห์และรายงาน:" -"** สร้างรายงานรายละเอียดเกี่ยวกับยอดขาย, สินค้าคงคลัง, และพฤติกรรมของลูกค้า - " -"**การอัปเดตแบบเรียลไทม์:** รับข้อมูลสดเกี่ยวกับระดับสินค้าคงคลัง, สถานะการสั่งซื้อ, " -"และการเปลี่ยนแปลงราคา\n" +"ยินดีต้อนรับสู่เอกสารคู่มือของ eVibes eVibes เป็นแพลตฟอร์มอีคอมเมิร์ซที่ทรงพลังซึ่งช่วยให้คุณสามารถเปิดตัวและจัดการร้านค้าออนไลน์ได้ทุกประเภทเพียงแค่ไม่กี่คลิก ## คุณสมบัติหลัก - **แคตตาล็อกสินค้า:** จัดการรายละเอียดสินค้า ราคาสินค้า สินค้าคงคลัง และความพร้อมจำหน่ายในหลายหมวดหมู่ - **การจัดการคำสั่งซื้อ:** ประมวลผลคำสั่งซื้อ ติดตามการจัดส่ง และจัดการคำขอของลูกค้าอย่างมีประสิทธิภาพ\n" +"- **การตรวจสอบสิทธิ์และการอนุญาต:** การตรวจสอบสิทธิ์ผู้ใช้อย่างครอบคลุมด้วยโทเค็น JWT และสิทธิ์ตามบทบาท - **การประมวลผลการชำระเงิน:** ผสานรวมเกตเวย์การชำระเงินหลายช่องทางและจัดการธุรกรรมอย่างปลอดภัย - **การจัดการบล็อกและเนื้อหา:** สร้างและจัดการโพสต์บล็อกและเนื้อหาการตลาดสำหรับร้านค้าของคุณ - **การดำเนินงาน B2B:** จุดเชื่อมต่อเฉพาะสำหรับการทำธุรกรรมระหว่างธุรกิจและการจัดการขายส่ง\n" +"- **รองรับหลายภาษา:** ให้บริการลูกค้าทั่วโลกด้วยความสามารถในการรองรับภาษาสากลอย่างเต็มรูปแบบ (i18n) - **การผสานรวมแบบกำหนดเอง:** สถาปัตยกรรม API ที่สามารถขยายได้สำหรับการผสานรวมกับแพลตฟอร์มและบริการภายนอก - **การวิเคราะห์และรายงาน:** สร้างรายงานรายละเอียดเกี่ยวกับยอดขาย, สินค้าคงคลัง, และพฤติกรรมของลูกค้า - **การอัปเดตแบบเรียลไทม์:** รับข้อมูลสดเกี่ยวกับระดับสินค้าคงคลัง, สถานะการสั่งซื้อ, และการเปลี่ยนแปลงราคา\n" "\n" -"## API ที่มีให้บริการ - **REST API:** อินเทอร์เฟซ RESTful แบบเต็มรูปแบบ (เอกสารนี้) - " -"**GraphQL API:** สามารถใช้งานได้ที่ `/graphql/` พร้อมอินเทอร์เฟซ GraphiQL " -"สำหรับการสืบค้นแบบโต้ตอบ ## การยืนยันตัวตน - การยืนยันตัวตนดำเนินการผ่านโทเค็น JWT " -"โปรดใส่โทเค็นในหัวข้อ `X-EVIBES-AUTH` ของคำขอของคุณในรูปแบบ `Bearer `\n" +"## API ที่มีให้บริการ - **REST API:** อินเทอร์เฟซ RESTful แบบเต็มรูปแบบ (เอกสารนี้) - **GraphQL API:** สามารถใช้งานได้ที่ `/graphql/` พร้อมอินเทอร์เฟซ GraphiQL สำหรับการสืบค้นแบบโต้ตอบ ## การยืนยันตัวตน - การยืนยันตัวตนดำเนินการผ่านโทเค็น JWT โปรดใส่โทเค็นในหัวข้อ `X-EVIBES-AUTH` ของคำขอของคุณในรูปแบบ `Bearer `\n" "- ระยะเวลาการใช้งานโทเค็นการเข้าถึงคือ {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" -"} {\"minutes\" if not DEBUG else \"hours\"}. - " -"ระยะเวลาการใช้งานโทเค็นการรีเฟรชคือ {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" -"} ชั่วโมง. - " -"โทเค็นการรีเฟรชจะถูกหมุนเวียนและยกเลิกการใช้งานโดยอัตโนมัติหลังการใช้งานเพื่อเพิ่มความปลอดภัย. " -"## การแปลภาษา (i18n) - ตั้งค่าหัวข้อ `Accept-Language` เพื่อระบุภาษาที่คุณต้องการ (เช่น " -"`Accept-Language: en-US`).\n" -"- ภาษาที่มีให้บริการสามารถดึงข้อมูลได้จากจุดสิ้นสุด `/app/languages/` - " -"เนื้อหาที่แสดงต่อผู้ใช้ทั้งหมดรองรับหลายภาษาโดยอัตโนมัติ ## รูปแบบการตอบกลับ API " -"รองรับรูปแบบการตอบกลับหลายรูปแบบ: - **JSON** (ค่าเริ่มต้น, รูปแบบ camelCase) - " -"**XML** (เพิ่ม `?format=xml` หรือตั้งค่า `Accept: application/xml`)\n" -"- **YAML** (เพิ่ม `?format=yaml` หรือตั้งค่า `Accept: application/x-yaml`) ## " -"สุขภาพและการตรวจสอบ - การตรวจสอบสุขภาพ: `/health/` - เมตริก Prometheus " -"(ป้องกันด้วย basic-auth): `/prometheus/` ## เวอร์ชัน เวอร์ชัน API ปัจจุบัน: " -"{EVIBES_VERSION}\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}. - ระยะเวลาการใช้งานโทเค็นการรีเฟรชคือ {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} ชั่วโมง. - โทเค็นการรีเฟรชจะถูกหมุนเวียนและยกเลิกการใช้งานโดยอัตโนมัติหลังการใช้งานเพื่อเพิ่มความปลอดภัย. ## การแปลภาษา (i18n) - ตั้งค่าหัวข้อ `Accept-Language` เพื่อระบุภาษาที่คุณต้องการ (เช่น `Accept-Language: en-US`).\n" +"- ภาษาที่มีให้บริการสามารถดึงข้อมูลได้จากจุดสิ้นสุด `/app/languages/` - เนื้อหาที่แสดงต่อผู้ใช้ทั้งหมดรองรับหลายภาษาโดยอัตโนมัติ ## รูปแบบการตอบกลับ API รองรับรูปแบบการตอบกลับหลายรูปแบบ: - **JSON** (ค่าเริ่มต้น, รูปแบบ camelCase) - **XML** (เพิ่ม `?format=xml` หรือตั้งค่า `Accept: application/xml`)\n" +"- **YAML** (เพิ่ม `?format=yaml` หรือตั้งค่า `Accept: application/x-yaml`) ## สุขภาพและการตรวจสอบ - การตรวจสอบสุขภาพ: `/health/` - เมตริก Prometheus (ป้องกันด้วย basic-auth): `/prometheus/` ## เวอร์ชัน เวอร์ชัน API ปัจจุบัน: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "หน้าแรก" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "เมนู" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "หน้าร้าน" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "แดชบอร์ด" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "สุขภาพ" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "การกำหนดค่า" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "ผู้ใช้" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "กลุ่ม" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "ผลิตภัณฑ์" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "หมวดหมู่" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "แบรนด์" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "บทความบล็อก" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "งานประจำ" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "กระดานงาน" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "การสนับสนุน" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.mo b/evibes/locale/tr_TR/LC_MESSAGES/django.mo index 62174908b3f86895120b4f7643e5647d6fceadaf..43f2d03c041fd7a03fe67a791e74f61c06a06299 100644 GIT binary patch delta 1686 zcmZ9LOKclO7{|Y)rO?vU^brDW9uuI?kd#M&Dm+?B+El9By0U{5MM#<06KC1=j5V{H z#zDwjIG~=;g1A&f8~|}Z!U{wnB0+2S0=<<(PHk@-pd1iLNL=`T>y3mu(&yiN^Y|YB zS^s+C&++=LU7J57j3HPrEbJh95xmifAB=A|5lwF+`VQO;zk3JKL*QZXVQ>sQ1YQK6 z0GGh6;4-)c`~t*v`YQFmPxr5ZJBjLa1CvK_;1<{g{sVS{TQcoLy&wk~2074Z>K_M3 z;hzSNfp39)|7(y7yasLtZ-QL-I*8EpJ2(LToA`C2eK@@j3rD~Qz|-J^;02I7nFcwq zN`065Z-awazYN|Fewprn15U#KAzklAo4nr#-Usdn-+;u>W{50iF5Jgi5%I89Nf?VickUKj7A|^ctazhg!-!FoD!1qB``ZKTx{1L2kW$T!* zw0A%b{2O>2{0q#1qoN)7T@W?UM<92y3UcB#kQ4k2J_gR=iz?>^4qV2eC{?l1>Q~l31s8-NstREf*l|?g(JxxkbJ0I zAP-iIo7~P0@+X}i!t`-iAFp8u7#cgjWa zI0)l^2dltO#Hz4@y)WUX6E+09cko;DI08EWV}*|vy15>UV7dkp=r7k&oO@^v$tfw$Fdd@4;xODTgM%q$*x2xD=O;mMs zrclU0T_QKen^BlAnwDHc&o$)#2!khax8=hl~)(%DqZKw+M!*<7>I)r_Wz=Bf*o zEh}_98yFYGSNq~Y8&&z<|K!cf)^gBl`1Gna+N;Dr^^e6X{TE-Ek`7wuRr7PDmCp%I z4f8`vQEsm4667p;&eKpqmaK9ftKVFs>mPg8S7Cf?;Kc464%HyKFHnqC3kVWl8tB{F zykeVcn!R}7N_||RPM_<=5s{M`wQht#{3T?lsnGWXI@Ya*E=kN6(3vL;KB-n?M7*AO x-u2}`Rg^D01gs#lb-cZVCzx$Dtn_htgrKtUqo5s&3fXvCY|orc7mA6(^dCIKU5x+$ delta 1138 zcmY+?KTK0W90%~9fd3FEpi~8gD@r6FAsRx6qCx_J2ue+hiGv{ry@uDmch|i4ir~`8 z!O6sjaZ%%-aV8`t>R@7Vz&N?MC?>|}pkZ*r&F`-~6)(Mh?%Lk_{ki@e`ZiEltFO32 z7_FFxFpqB|>W2Mgc*EF$nM$Hxa4+_$YNA>=52NrVY=;lwQMd~0;5s}AsfGwkYJ?52 z9rF3JFhW$I2`un@nt~ND1ACx>eeeB`$ouD%7d?J>)?)15_SWR^(jcs~KOVf>?7j_*(recv~~w zth92aEhcilWwb}5$z)u_T{FKxqsCFe^~kZnj*RwQkd`gdu5pAZ{gN(9M+uV_{;U!+ z#>q*&@ZV>MmO-@Od*npWS=$s$)J}E!##MNR_9>Ci<&5i7QhM2GBi$5DdP*b`<0X^h ziRF&E_tn8j%k4HKXp4j@KEWbuD|c&(!*evKjkcU%Oq>dO#HHY_XlZ!;z;d(7x3rL{ zl_f$o8Kr}w7-;(UjjwE#Hd^SsBVFmOECv0sdwrKJ-?cOiDbH6~8Yw\n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Projenin adı" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Şirketin adı" @@ -30,153 +26,145 @@ msgid "Phone number of the company" msgstr "Şirketin telefon numarası" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Şirketinizin yetki alanındaki vergi oranı. Vergi işlemek istemiyorsanız 0 " +"bırakın." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Döviz kuru API anahtarı" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! DEĞIŞTIRMEYIN!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP ana bilgisayarı" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP bağlantı noktası" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "TLS kullanın" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "SSL kullanın" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP kullanıcı adı" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP şifresi" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "E-posta göndericisinin adresi" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "Anonim kullanıcılardan gelen mesajları kaç gün saklıyoruz" -#: evibes/settings/constance.py:39 -msgid "How many days we store messages from authenticated users" -msgstr "Kimliği doğrulanmış kullanıcılardan gelen mesajları kaç gün saklıyoruz" - #: evibes/settings/constance.py:40 +msgid "How many days we store messages from authenticated users" +msgstr "" +"Kimliği doğrulanmış kullanıcılardan gelen mesajları kaç gün saklıyoruz" + +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Satın alma işlevini devre dışı bırakın" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL'si" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API Anahtarı" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Soyut API Anahtarı" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Reklam verilerini depolamak için bir varlık" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Analitik verileri depolamak için bir varlık" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Satıcıların API'lerinden gelen yanıtları kaydedin" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Genel Seçenekler" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Yasal Seçenekler" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "E-posta Seçenekleri" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Özellikler Seçenekler" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "SEO Seçenekleri" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Hata Ayıklama Seçenekleri" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +176,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,65 +184,44 @@ msgstr "" "\n" "eVibes belgelerine hoş geldiniz.\n" "\n" -"eVibes, sadece birkaç tıklamayla her türlü çevrimiçi mağazayı açmanıza ve " -"yönetmenize olanak tanıyan güçlü bir e-ticaret platformudur.\n" +"eVibes, sadece birkaç tıklamayla her türlü çevrimiçi mağazayı açmanıza ve yönetmenize olanak tanıyan güçlü bir e-ticaret platformudur.\n" "\n" "## Temel Özellikler\n" -"- Ürün Kataloğu:** Birden fazla kategoride ürün ayrıntılarını, " -"fiyatlandırmayı, envanteri ve kullanılabilirliği yönetin.\n" -"- Sipariş Yönetimi:** Siparişleri işleyin, gönderimi takip edin ve müşteri " -"taleplerini verimli bir şekilde ele alın.\n" -"- Kimlik Doğrulama ve Yetkilendirme:** JWT belirteçleri ve rol tabanlı " -"izinler ile kapsamlı kullanıcı kimlik doğrulaması.\n" -"- **Ödeme İşleme:** Birden fazla ödeme ağ geçidini entegre edin ve işlemleri " -"güvenli bir şekilde yönetin.\n" -"- **Blog ve İçerik Yönetimi:** Mağazanız için blog gönderileri ve pazarlama " -"içeriği oluşturun ve yönetin.\n" -"- **B2B İşlemleri:** İşletmeler arası işlemler ve toptan satış yönetimi için " -"özel uç noktalar.\n" -"- Çoklu Dil Desteği:** Tam uluslararasılaştırma (i18n) yetenekleri ile dünya " -"çapındaki müşterilere hizmet verin.\n" -"- Özel Entegrasyonlar:** Harici platformlar ve hizmetlerle entegrasyon için " -"genişletilebilir API mimarisi.\n" -"- Analitik ve Raporlama:** Satış, envanter ve müşteri davranışları hakkında " -"ayrıntılı raporlar oluşturun.\n" -"- Gerçek Zamanlı Güncellemeler:** Envanter seviyeleri, sipariş durumları ve " -"fiyat değişiklikleri hakkında canlı veriler alın.\n" +"- Ürün Kataloğu:** Birden fazla kategoride ürün ayrıntılarını, fiyatlandırmayı, envanteri ve kullanılabilirliği yönetin.\n" +"- Sipariş Yönetimi:** Siparişleri işleyin, gönderimi takip edin ve müşteri taleplerini verimli bir şekilde ele alın.\n" +"- Kimlik Doğrulama ve Yetkilendirme:** JWT belirteçleri ve rol tabanlı izinler ile kapsamlı kullanıcı kimlik doğrulaması.\n" +"- **Ödeme İşleme:** Birden fazla ödeme ağ geçidini entegre edin ve işlemleri güvenli bir şekilde yönetin.\n" +"- **Blog ve İçerik Yönetimi:** Mağazanız için blog gönderileri ve pazarlama içeriği oluşturun ve yönetin.\n" +"- **B2B İşlemleri:** İşletmeler arası işlemler ve toptan satış yönetimi için özel uç noktalar.\n" +"- Çoklu Dil Desteği:** Tam uluslararasılaştırma (i18n) yetenekleri ile dünya çapındaki müşterilere hizmet verin.\n" +"- Özel Entegrasyonlar:** Harici platformlar ve hizmetlerle entegrasyon için genişletilebilir API mimarisi.\n" +"- Analitik ve Raporlama:** Satış, envanter ve müşteri davranışları hakkında ayrıntılı raporlar oluşturun.\n" +"- Gerçek Zamanlı Güncellemeler:** Envanter seviyeleri, sipariş durumları ve fiyat değişiklikleri hakkında canlı veriler alın.\n" "\n" "## Mevcut API'ler\n" "- **REST API:** Tam RESTful arayüz (bu dokümantasyon)\n" -"- **GraphQL API:** Etkileşimli sorgular için GraphiQL arayüzü ile `/graphql/" -"` adresinde mevcuttur\n" +"- **GraphQL API:** Etkileşimli sorgular için GraphiQL arayüzü ile `/graphql/` adresinde mevcuttur\n" "\n" "## Kimlik Doğrulama\n" -"- Kimlik doğrulama JWT belirteçleri aracılığıyla gerçekleştirilir. " -"Belirteci, isteklerinizin `X-EVIBES-AUTH` başlığına `Bearer ` " -"biçiminde ekleyin.\n" +"- Kimlik doğrulama JWT belirteçleri aracılığıyla gerçekleştirilir. Belirteci, isteklerinizin `X-EVIBES-AUTH` başlığına `Bearer ` biçiminde ekleyin.\n" "- Erişim belirteci ömrü {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Yenileme belirteci ömrü {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} saattir.\n" -"- Yenileme belirteçleri, gelişmiş güvenlik için kullanımdan sonra otomatik " -"olarak döndürülür ve geçersiz kılınır.\n" +"- Yenileme belirteçleri, gelişmiş güvenlik için kullanımdan sonra otomatik olarak döndürülür ve geçersiz kılınır.\n" "\n" "## Uluslararasılaştırma (i18n)\n" -"- Tercih ettiğiniz dili belirtmek için `Accept-Language` başlığını ayarlayın " -"(örneğin, `Accept-Language: en-US`).\n" +"- Tercih ettiğiniz dili belirtmek için `Accept-Language` başlığını ayarlayın (örneğin, `Accept-Language: en-US`).\n" "- Mevcut diller `/app/languages/` uç noktasından alınabilir.\n" -"- Kullanıcıya yönelik tüm içerikler kutudan çıkar çıkmaz birden fazla dili " -"destekler.\n" +"- Kullanıcıya yönelik tüm içerikler kutudan çıkar çıkmaz birden fazla dili destekler.\n" "\n" "## Yanıt Biçimleri\n" "API birden fazla yanıt biçimini destekler:\n" "- **JSON** (varsayılan, camelCase biçimlendirilmiş)\n" -"- **XML** (`?format=xml` ekleyin veya `Accept: application/xml` olarak " -"ayarlayın)\n" -"- **YAML** (`?format=yaml` ekleyin veya `Accept: application/x-yaml` olarak " -"ayarlayın)\n" +"- **XML** (`?format=xml` ekleyin veya `Accept: application/xml` olarak ayarlayın)\n" +"- **YAML** (`?format=yaml` ekleyin veya `Accept: application/x-yaml` olarak ayarlayın)\n" "\n" "## Sağlık ve İzleme\n" "- Sağlık kontrolleri: `/health/`\n" @@ -263,18 +230,54 @@ msgstr "" "## Sürüm\n" "Geçerli API sürümü: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Ev" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Menü" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Vitrin" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Gösterge Tablosu" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Sağlık" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Konfigürasyon" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Kullanıcılar" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Gruplar" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Ürünler" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Kategoriler" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Markalar" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Blog Yazıları" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Periyodik Görevler" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Görev Panosu" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Destek" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.mo b/evibes/locale/vi_VN/LC_MESSAGES/django.mo index 6a7e7e488e20c8087808b72619ed65e186f41995..36701e6b338135604aa21e6963940d5492b3b2b3 100644 GIT binary patch delta 1711 zcmZ9KU1%It6vt1~v}#Sd+IFoqNpq4IYm+vqrJ}S#VbhihX&Turr359D*~!kB-8;*C z#9cpFf?$;*wG0YANE1qxNDFBbG0h;sP6!C~LHeLig?aG7?C}#{O;aaiSXC!Ot!@+yh&|f50@jIaN>84oaZ?paeS9 zm>&fXVSWO95qt}j^Gl!zybU&kcR>;U6Nu3CJJ<>So6KuOZSZcxLLc}rcmjMBJPk@E zW1s{!8gsWXe+TTs`UUVI@OoqaEAR~FtBv(E%9Q;Ma1+=IzKSmQgXtO~f3S_{No-t( ztR3JoD1yERGvF@`?&EsPZ4lz=y#_x4MeygKT**yP&VL6!1O5ym7qvhwerY!-`$xf= zC>q0$v{nOKz#@1Stb(tBKY()JKsV7Ia2OOn50uW#fGCzOf(OA_Q2g(LJ>XxU_;1HV z3S>|Uc)kbsFUpQ%K`J;4N+)#i2>3QA!j?g~!w8%Ke*`7KIlMTb1n@}8t%>5g>1{Uv;wVEwQMhg2q`4<`30oxxL~r(nrg{JUw#mh@pBA1pg| z$?#0WcLzbo(u4i2-|ov4?LyghJ(n_$rt&TgX`WHA9m~M4ttPDk9n)NM!q%L8@JFk@ z)3N=sODA)=Q66>dN|jC;TG2BDwbg!M*eGa4K3(=KTe);fvx+>4tZXMMbjnaZjc6r< z?Ma3b*6mVRQ`I1ydhVd%Sa#mhIj6Z(E{&SDGFbVg3B!57n~*l|>z*5or^ai3xokTg z$*Dvm{wnOC2DTKx?mL!?prS{jRBhk6pLBqS4Q<-s18gN5oVV2;kKfRg$DYmTmTtH% zds@YC2k4Aza5g)fFgKhPI#B5>{+Y_8&Sj!mi>Ix4WffDXe;H+^@a60RbbPK z!}C53MRPjmHDz)s4zKDo6t7(M*^I6!lQQwj6?m>)g6oXWQ*z{86%2L;9V2G6SdywM zRhGU}HV)@?xWwT_Blxv*xh)A?jKdom>sb9zaoLRK%3O@T3Ff$O7uIg*hz&866M1^H zgk)Yd_>GU(PkW+m8nWOPhZmr6Dh?Ne!LHtxtVlz|cxAp6WV=2MHg$K_a&h=IBjtHq zq>sYci&y3>i1H;0vi+}s^*H86c4F=#e^utA13s>QGNHs)g zQWLC)0m$QzK{rv3`q9ArGzcr<80>}y?12v<5BLnZfK|tGj7F0h;4ZiuHp3v?1XZ{Z zCLtGa+38O@{hQE>_30iOT)<1X9xg#1_}=M%a{LM};B-o`9y6ZCHXHHYPz%vkn1x)x z6g&=R9ltrxyHMpGJP$!Wp)?d&pC-}ZfsdR&UPCVE1LU22f#=`~ya-PSqBi&d^3IkZ zpUg+dCsl$6;V;+=XGdiK9(SZNIF$`$tk+2LuH{hq-N%P=*}p<5Krq*8`y zk)ozA4I8Q%rL$>Ggu@|QB@~|9TN`xCMR6;j6kcRSBv#Dd&_PBYCA&Pqm6Bqr`l$Wy zjC|)kB%gREWXRVp3bS~*@EreHSyJp?F+Zb6=o7v?Qt Z#f$j~j4I|It0GpI)<@-htB~jY;y1@lzc>H@ diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.po b/evibes/locale/vi_VN/LC_MESSAGES/django.po index 1884b0da..ce349668 100644 --- a/evibes/locale/vi_VN/LC_MESSAGES/django.po +++ b/evibes/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "Tên của dự án" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "Tên công ty" @@ -30,154 +26,146 @@ msgid "Phone number of the company" msgstr "Số điện thoại của công ty" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "" +"Tỷ lệ thuế tại khu vực pháp lý của công ty bạn. Để trống ô này nếu bạn không" +" muốn xử lý thuế." + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "Khóa API tỷ giá hối đoái" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!KHÔNG THAY ĐỔI!!!" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "Máy chủ SMTP" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "Cổng SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "Sử dụng TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "Sử dụng SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "Tên người dùng SMTP" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "Mật khẩu SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "Địa chỉ email của người gửi" -#: evibes/settings/constance.py:38 -msgid "How many days we store messages from anonymous users" -msgstr "Chúng tôi lưu trữ tin nhắn từ người dùng ẩn danh trong bao nhiêu ngày?" - #: evibes/settings/constance.py:39 +msgid "How many days we store messages from anonymous users" +msgstr "" +"Chúng tôi lưu trữ tin nhắn từ người dùng ẩn danh trong bao nhiêu ngày?" + +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "" "Chúng tôi lưu trữ tin nhắn từ người dùng đã xác thực trong bao nhiêu ngày?" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "Vô hiệu hóa chức năng mua hàng" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "Địa chỉ URL API Nominatim của OpenStreetMap" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "Khóa API OpenAI" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "Tóm tắt Khóa API" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "Một thực thể dùng để lưu trữ dữ liệu quảng cáo" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "Một thực thể dùng để lưu trữ dữ liệu phân tích." -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "Lưu trữ phản hồi từ các API của nhà cung cấp" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "Tùy chọn chung" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "Các lựa chọn pháp lý" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "Tùy chọn email" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "Tính năng và tùy chọn" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "Các tùy chọn SEO" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "Các tùy chọn gỡ lỗi" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -189,68 +177,73 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" msgstr "" "\n" -"Chào mừng đến với tài liệu hướng dẫn của eVibes. eVibes là một nền tảng " -"thương mại điện tử mạnh mẽ cho phép bạn khởi chạy và quản lý cửa hàng trực " -"tuyến bất kỳ loại nào chỉ với vài cú nhấp chuột. ## Tính năng chính - **Danh " -"mục sản phẩm:** Quản lý chi tiết sản phẩm, giá cả, tồn kho và tình trạng sẵn " -"có trên nhiều danh mục. - **Quản lý đơn hàng:** Xử lý đơn hàng, theo dõi quá " -"trình giao hàng và xử lý yêu cầu của khách hàng một cách hiệu quả.\n" -"- **Xác thực & Quyền truy cập:** Hệ thống xác thực người dùng toàn diện với " -"token JWT và quyền truy cập dựa trên vai trò. - **Xử lý thanh toán:** Tích " -"hợp nhiều cổng thanh toán và quản lý giao dịch an toàn. - **Quản lý blog và " -"nội dung:** Tạo và quản lý bài viết blog và nội dung tiếp thị cho cửa hàng " -"của bạn. - **Hoạt động B2B:** Các điểm cuối chuyên dụng cho giao dịch B2B và " -"quản lý bán sỉ.\n" -"- **Hỗ trợ đa ngôn ngữ:** Phục vụ khách hàng toàn cầu với khả năng quốc tế " -"hóa (i18n) đầy đủ. - **Tích hợp tùy chỉnh:** Kiến trúc API mở rộng để tích " -"hợp với các nền tảng và dịch vụ bên ngoài. - **Phân tích & Báo cáo:** Tạo " -"báo cáo chi tiết về doanh số, hàng tồn kho và hành vi khách hàng. - **Cập " -"nhật thời gian thực:** Nhận dữ liệu trực tiếp về mức tồn kho, trạng thái đơn " -"hàng và thay đổi giá.\n" +"Chào mừng đến với tài liệu hướng dẫn của eVibes. eVibes là một nền tảng thương mại điện tử mạnh mẽ cho phép bạn khởi chạy và quản lý cửa hàng trực tuyến bất kỳ loại nào chỉ với vài cú nhấp chuột. ## Tính năng chính - **Danh mục sản phẩm:** Quản lý chi tiết sản phẩm, giá cả, tồn kho và tình trạng sẵn có trên nhiều danh mục. - **Quản lý đơn hàng:** Xử lý đơn hàng, theo dõi quá trình giao hàng và xử lý yêu cầu của khách hàng một cách hiệu quả.\n" +"- **Xác thực & Quyền truy cập:** Hệ thống xác thực người dùng toàn diện với token JWT và quyền truy cập dựa trên vai trò. - **Xử lý thanh toán:** Tích hợp nhiều cổng thanh toán và quản lý giao dịch an toàn. - **Quản lý blog và nội dung:** Tạo và quản lý bài viết blog và nội dung tiếp thị cho cửa hàng của bạn. - **Hoạt động B2B:** Các điểm cuối chuyên dụng cho giao dịch B2B và quản lý bán sỉ.\n" +"- **Hỗ trợ đa ngôn ngữ:** Phục vụ khách hàng toàn cầu với khả năng quốc tế hóa (i18n) đầy đủ. - **Tích hợp tùy chỉnh:** Kiến trúc API mở rộng để tích hợp với các nền tảng và dịch vụ bên ngoài. - **Phân tích & Báo cáo:** Tạo báo cáo chi tiết về doanh số, hàng tồn kho và hành vi khách hàng. - **Cập nhật thời gian thực:** Nhận dữ liệu trực tiếp về mức tồn kho, trạng thái đơn hàng và thay đổi giá.\n" "\n" -"## Các API có sẵn - **REST API:** Giao diện RESTful đầy đủ (tài liệu này) - " -"**GraphQL API:** Có sẵn tại `/graphql/` với giao diện GraphiQL cho các truy " -"vấn tương tác ## Xác thực - Xác thực được xử lý thông qua token JWT. Bao gồm " -"token trong tiêu đề `X-EVIBES-AUTH` của yêu cầu của bạn theo định dạng " -"`Bearer `.\n" +"## Các API có sẵn - **REST API:** Giao diện RESTful đầy đủ (tài liệu này) - **GraphQL API:** Có sẵn tại `/graphql/` với giao diện GraphiQL cho các truy vấn tương tác ## Xác thực - Xác thực được xử lý thông qua token JWT. Bao gồm token trong tiêu đề `X-EVIBES-AUTH` của yêu cầu của bạn theo định dạng `Bearer `.\n" "- Thời hạn sử dụng của token truy cập là {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" -"} {\"minutes\" if not DEBUG else \"hours\"}. - Thời hạn sử dụng của token " -"làm mới là {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" -"} giờ. - Token làm mới được tự động xoay vòng và vô hiệu hóa sau khi sử dụng " -"để tăng cường bảo mật. ## Quốc tế hóa (i18n) - Đặt tiêu đề `Accept-Language` " -"để chỉ định ngôn ngữ ưa thích của bạn (ví dụ: `Accept-Language: en-US`).\n" -"- Các ngôn ngữ có sẵn có thể được lấy từ điểm cuối `/app/languages/`. - Tất " -"cả nội dung hiển thị cho người dùng đều hỗ trợ nhiều ngôn ngữ ngay từ đầu. " -"## Định dạng phản hồi API hỗ trợ nhiều định dạng phản hồi: - **JSON** (mặc " -"định, định dạng camelCase) - **XML** (thêm `?format=xml` hoặc đặt `Accept: " -"application/xml`)\n" -"- **YAML** (thêm `?format=yaml` hoặc đặt `Accept: application/x-yaml`) ## " -"Sức khỏe & Giám sát - Kiểm tra sức khỏe: `/health/` - Chỉ số Prometheus (bảo " -"vệ bằng basic-auth): `/prometheus/` ## Phiên bản Phiên bản API hiện tại: " -"{EVIBES_VERSION}\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}. - Thời hạn sử dụng của token làm mới là {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} giờ. - Token làm mới được tự động xoay vòng và vô hiệu hóa sau khi sử dụng để tăng cường bảo mật. ## Quốc tế hóa (i18n) - Đặt tiêu đề `Accept-Language` để chỉ định ngôn ngữ ưa thích của bạn (ví dụ: `Accept-Language: en-US`).\n" +"- Các ngôn ngữ có sẵn có thể được lấy từ điểm cuối `/app/languages/`. - Tất cả nội dung hiển thị cho người dùng đều hỗ trợ nhiều ngôn ngữ ngay từ đầu. ## Định dạng phản hồi API hỗ trợ nhiều định dạng phản hồi: - **JSON** (mặc định, định dạng camelCase) - **XML** (thêm `?format=xml` hoặc đặt `Accept: application/xml`)\n" +"- **YAML** (thêm `?format=yaml` hoặc đặt `Accept: application/x-yaml`) ## Sức khỏe & Giám sát - Kiểm tra sức khỏe: `/health/` - Chỉ số Prometheus (bảo vệ bằng basic-auth): `/prometheus/` ## Phiên bản Phiên bản API hiện tại: {EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "Trang chủ" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "Thực đơn" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "Mặt tiền cửa hàng" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "Bảng điều khiển" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "Sức khỏe" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "Cấu hình" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "Người dùng" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "Nhóm" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "Sản phẩm" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "Các danh mục" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "Thương hiệu" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "Bài viết trên blog" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "Các tác vụ định kỳ" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "Bảng nhiệm vụ" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "Hỗ trợ" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.mo b/evibes/locale/zh_Hans/LC_MESSAGES/django.mo index 5c0944a9a03956ac8f6f1bc9a2a2efd7542459b3..14ab8d9a814cd819c79e9c5bea4a5e1e00da2b95 100644 GIT binary patch delta 1601 zcmZ9LU2GIp6vqz;h}5!*ETG-eD;5!IX;l(UF_?fsf<>xZeBr@PccRL3d`BMD2?vMt$&qrk58^a^`pMx%Zy0 zd*@a|c31k|nq|WTsewkI_7b9<;GL!TK&BrdI=qVLNAM}k!>fs&0Jnnczy|OI@LjMP z{1ki)ya28MuYx#E<8oe*>$kxtiPCfjgQv0K9#{_k4TixLp~XNEkR8>6>}ZFazX9&R zd@uMK_!-FOZ-AWOZEzX*6Ud4G48k@223CRp2J8Sqi?d$~Rd9>RQH+QTT5*DJy0;AZdxbh!rXPa{HR&0?T1`o9qys=&v= zT_7j+wq!!ukAmEh(~@6Go(DPMDQoxpEeMtXrWR5OE1V25p8ukWF%c>ko?I=@uye9b5!=im#R5 zLgaOP_)n{WJ}h{kfo#L~c__Dz+xZMMkcq#Ru3Z&w5G{2{)96&~b~R1EZ_jJOsP&5HGrMNRF7t_nTX*{Yfk?Iwhcr((9{w1isHsbtbHZQ@fwju>?b z6Ez4;7ayif&4N?ThrM(gDf2LEAWnl=mA`L3tm|XPZ_4l~Byqg<$vorokpPxVFpE~ht&k^^VBi{L3aeBZz uI^kaKLylPTuFoyp%$CNc{Nc03>5QnyMk>zE`$PGlJ#xq$g2_8MMgIfi(r~l@ delta 1105 zcmY+?OH30%7zglAz*l*+JOl+=7sXgbf<~jHF`O{rfC9E2Jk_OL0!X_}yA9x_7=y6} z0?8o8XcG{l9*89&DAEJrWHg>M@ub9j<>~Cgv9^X91TGm{#^|FFH zgmeJ87WvpVq9%AY4Eh?`Es3bfC`9dH>o!c}+@eusRNb+|8{_>5^QmZ+0gXw9A12NtXFy`RE`I;nT z{QjFbFdoZ^gTfO0K4Qf03>z{c=3sbdy!b9;PWi}ue^tmv5b#gJO&B}dZZ_~W@EhV& z;e?wou9VCCSpQA@rpU6ml5e%tOU`aN(&uZGqgt;N3agsp(-i*^mvp5GwSc1aDp9ds zye8h3bUT!w5|#&~j*!-;1|!tw@pMX^VRdMj+R#;8vmO=$*0$#Ja^HZ|gVB;|^rQ=N zK#|lQ36n`aH4u`6!~eBmrGBg{zFJR+23w8juz4FaHLPHcphoU!D5Qop^2m{^-Kre+ z)1`B3XOUnO+{*xHX>}iRWftZiSal&1ENVW*&^|w`cWxPbv3! zIybu{4%&S}*elER(RqDhS)UxwK3O0P%HDq_p4(kEqd7aZw2@5c6ECteqQViY(pT>0 Y5)UaemCTG?r*tZXIWvh>vFWJ#4LKUgaR2}S diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.po b/evibes/locale/zh_Hans/LC_MESSAGES/django.po index f157ee06..41331168 100644 --- a/evibes/locale/zh_Hans/LC_MESSAGES/django.po +++ b/evibes/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-12 15:44+0300\n" +"POT-Creation-Date: 2025-11-15 17:05+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,10 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: evibes/settings/constance.py:23 -msgid "Name of the project" -msgstr "项目名称" - #: evibes/settings/constance.py:24 msgid "Name of the company" msgstr "公司名称" @@ -30,153 +26,142 @@ msgid "Phone number of the company" msgstr "公司电话号码" #: evibes/settings/constance.py:27 +msgid "" +"Tax rate in jurisdiction of your company. Leave 0 if you don't want to " +"process taxes." +msgstr "贵公司所在地区的税率。如果不想处理税款,请留下 0。" + +#: evibes/settings/constance.py:28 msgid "Exchange rate API key" msgstr "汇率 API 密钥" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "!!!DO NOT CHANGE!!!" msgstr "不要换" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "SMTP host" msgstr "SMTP 主机" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP port" msgstr "SMTP 端口" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "Use TLS" msgstr "使用 TLS" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use SSL" msgstr "使用 SSL" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "SMTP username" msgstr "SMTP 用户名" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP password" msgstr "SMTP 密码" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Mail from option" msgstr "邮件发件人地址" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "How many days we store messages from anonymous users" msgstr "我们将匿名用户的信息保存多少天" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from authenticated users" msgstr "我们会将已验证用户的信息保存多少天" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "Disable buy functionality" msgstr "禁用购买功能" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenAI API Key" msgstr "OpenAI API 密钥" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "Abstract API Key" msgstr "抽象应用程序接口密钥" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "HTTP Proxy" msgstr "HTTP 代理服务器" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing advertisiment data" msgstr "存储广告数据的实体" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing analytics data" msgstr "存储分析数据的实体" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:50 msgid "Save responses from vendors' APIs" msgstr "保存来自供应商应用程序接口的响应" -#: evibes/settings/constance.py:55 -msgid "General Options" -msgstr "一般选项" +#: evibes/settings/constance.py:56 +msgid "Legal Options" +msgstr "法律选择" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:63 msgid "Email Options" msgstr "电子邮件选项" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:73 msgid "Features Options" msgstr "功能选项" -#: evibes/settings/constance.py:81 +#: evibes/settings/constance.py:82 msgid "SEO Options" msgstr "搜索引擎优化选项" -#: evibes/settings/constance.py:85 +#: evibes/settings/constance.py:86 msgid "Debugging Options" msgstr "调试选项" -#: evibes/settings/drf.py:50 +#: evibes/settings/drf.py:49 msgid "" "\n" "Welcome to the eVibes documentation.\n" "\n" -"eVibes is a powerful e-commerce platform that allows you to launch and " -"manage an online store of any kind in just a few clicks. \n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "} {\"minutes\" if not DEBUG else \"hours\"}.\n" "- Refresh token lifetime is {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -188,7 +173,7 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {EVIBES_VERSION}\n" @@ -196,8 +181,7 @@ msgstr "" "\n" "欢迎使用 eVibes 文档。\n" "\n" -"eVibes 是一个功能强大的电子商务平台,只需点击几下,您就可以创建和管理任何类型" -"的网上商店。\n" +"eVibes 是一个功能强大的电子商务平台,只需点击几下,您就可以创建和管理任何类型的网上商店。\n" "\n" "## 关键功能\n" "- 产品目录:** 管理多个类别的产品详情、定价、库存和可用性。\n" @@ -213,25 +197,20 @@ msgstr "" "\n" "## 可用的应用程序接口\n" "- REST API:** 完整的 REST 接口(本文档)\n" -"- **GraphQL 应用程序接口:** 可在 `/graphql/`使用 GraphiQL 接口进行交互式查" -"询\n" +"- **GraphQL 应用程序接口:** 可在 `/graphql/`使用 GraphiQL 接口进行交互式查询\n" "\n" "## 验证\n" -"- 通过 JWT 标记进行身份验证。在请求的 `X-EVIBES-AUTH` 头中包含令牌,格式为 " -"`Bearer `。\n" +"- 通过 JWT 标记进行身份验证。在请求的 `X-EVIBES-AUTH` 头中包含令牌,格式为 `Bearer `。\n" "- 访问令牌的有效期为 {\n" -" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " -"DEBUG else 3600 # type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" "}{\"minutes\" if not DEBUG else \"hours\"}。\n" "- 刷新令牌的有效期为 {\n" -" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " -"type: ignore [union-attr]\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" "} 小时。\n" "- 刷新令牌在使用后会自动轮换和失效,以增强安全性。\n" "\n" "### 国际化(i18n)\n" -"- 设置 `Accept-Language` 标头,指定首选语言(例如,`Accept-Language: en-" -"US`)。\n" +"- 设置 `Accept-Language` 标头,指定首选语言(例如,`Accept-Language: en-US`)。\n" "- 可从 `/app/languages/` 端点检索可用语言。\n" "- 所有面向用户的内容均支持多种语言。\n" "\n" @@ -248,18 +227,54 @@ msgstr "" "## 版本\n" "当前 API 版本:{EVIBES_VERSION}\n" -#: evibes/settings/jazzmin.py:20 -msgid "Home" -msgstr "首页" +#: evibes/settings/unfold.py:62 +msgid "Menu" +msgstr "菜单" -#: evibes/settings/jazzmin.py:21 -msgid "Storefront" -msgstr "店面" +#: evibes/settings/unfold.py:67 +msgid "Dashboard" +msgstr "仪表板" -#: evibes/settings/jazzmin.py:32 +#: evibes/settings/unfold.py:72 +msgid "Health" +msgstr "健康" + +#: evibes/settings/unfold.py:77 +msgid "Config" +msgstr "配置" + +#: evibes/settings/unfold.py:82 +msgid "Users" +msgstr "用户" + +#: evibes/settings/unfold.py:87 +msgid "Groups" +msgstr "组别" + +#: evibes/settings/unfold.py:92 +msgid "Products" +msgstr "产品" + +#: evibes/settings/unfold.py:97 +msgid "Categories" +msgstr "类别" + +#: evibes/settings/unfold.py:102 +msgid "Brands" +msgstr "品牌" + +#: evibes/settings/unfold.py:107 +msgid "Blogposts" +msgstr "博客文章" + +#: evibes/settings/unfold.py:112 +msgid "Periodic Tasks" +msgstr "定期任务" + +#: evibes/settings/unfold.py:137 msgid "Taskboard" msgstr "任务板" -#: evibes/settings/jazzmin.py:34 +#: evibes/settings/unfold.py:142 msgid "Support" msgstr "支持" diff --git a/evibes/settings/emailing.py b/evibes/settings/emailing.py index e709ffdc..fac159f2 100644 --- a/evibes/settings/emailing.py +++ b/evibes/settings/emailing.py @@ -1,9 +1,10 @@ -from evibes.settings.constance import CONSTANCE_CONFIG +from os import getenv EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" -EMAIL_HOST = CONSTANCE_CONFIG.get("EMAIL_HOST")[0] # type: ignore [index] -EMAIL_PORT = CONSTANCE_CONFIG.get("EMAIL_PORT")[0] # type: ignore [index] -EMAIL_USE_TLS = CONSTANCE_CONFIG.get("EMAIL_USE_TLS")[0] # type: ignore [index] -EMAIL_USE_SSL = CONSTANCE_CONFIG.get("EMAIL_USE_SSL")[0] # type: ignore [index] -EMAIL_HOST_USER = CONSTANCE_CONFIG.get("EMAIL_HOST_USER")[0] # type: ignore [index] -EMAIL_HOST_PASSWORD = CONSTANCE_CONFIG.get("EMAIL_HOST_PASSWORD")[0] # type: ignore [index] +EMAIL_HOST = getenv("EMAIL_HOST", "smtp.404.org") +EMAIL_PORT = int(getenv("EMAIL_PORT", "465")) +EMAIL_USE_TLS = bool(int(getenv("EMAIL_USE_TLS", 0))) +EMAIL_USE_SSL = bool(int(getenv("EMAIL_USE_SSL", 1))) +EMAIL_HOST_USER = getenv("EMAIL_HOST_USER", "no-user@fix.this") +EMAIL_HOST_PASSWORD = getenv("EMAIL_HOST_PASSWORD", "SUPERsecretPASSWORD") +EMAIL_FROM = getenv("EMAIL_FROM", "eVibes") diff --git a/evibes/settings/unfold.py b/evibes/settings/unfold.py index 9247b627..17e74c26 100644 --- a/evibes/settings/unfold.py +++ b/evibes/settings/unfold.py @@ -114,22 +114,22 @@ UNFOLD = { "link": reverse_lazy("admin:django_celery_beat_periodictask_changelist"), }, { - "title": _("Sitemap"), + "title": "Sitemap", "icon": "rss_feed", "link": reverse_lazy("core:sitemap-index"), }, { - "title": _("Swagger"), + "title": "Swagger", "icon": "integration_instructions", "link": reverse_lazy("swagger-ui-platform"), }, { - "title": _("Redoc"), + "title": "Redoc", "icon": "integration_instructions", "link": reverse_lazy("redoc-ui-platform"), }, { - "title": _("GraphQL"), + "title": "GraphQL", "icon": "graph_5", "link": reverse_lazy("graphql-platform"), }, From efa21cf9c0fbc17ed229faa46d5fa5dc8ddb937c Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 00:52:39 +0300 Subject: [PATCH 09/18] =?UTF-8?q?Features:=201)=20Updated=20Russian=20tran?= =?UTF-8?q?slations=20for=20UI=20terms=20like=20"Dashboard"=20=E2=86=92=20?= =?UTF-8?q?"=D0=9F=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C",=20"Blogposts"=20?= =?UTF-8?q?=E2=86=92=20"=D0=9F=D0=BE=D1=81=D1=82=D1=8B",=20etc.;=202)=20Ad?= =?UTF-8?q?ded=20support=20for=20multiple=20locale=20directories=20in=20`L?= =?UTF-8?q?OCALE=5FPATHS`;=203)=20Introduced=20`LANGUAGE=5FURL=5FOVERRIDES?= =?UTF-8?q?`=20for=20URL=20language=20normalization.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: 1) Fixed case sensitivity in region code normalization (lowercase regions); 2) Corrected translation file updates to match new string values. Extra: 1) Refactored middleware to normalize language codes to lowercase; 2) Added new locale paths for engine modules; 3) Improved consistency in translation keys and fallbacks. --- evibes/locale/ru_RU/LC_MESSAGES/django.mo | Bin 11201 -> 11147 bytes evibes/locale/ru_RU/LC_MESSAGES/django.po | 10 +++++----- evibes/middleware.py | 4 ++-- evibes/settings/base.py | 10 ++++++++++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.mo b/evibes/locale/ru_RU/LC_MESSAGES/django.mo index 4568ee84b81c5f11b8702fdf591cb0beffd86739..f415534c4f0fd0a908fdaa9c71b4818ab2973bf3 100644 GIT binary patch delta 360 zcmXZYy-EW?5Ww*<5saRKA0T2QqMo^n;uSVZ5G=&r!fP$G48lEt=O-!7LUNsrAXo?r z=cUoYKpG|8?gQux*jWYy|3lL3Z)b*?VYeM7VfHi-kBG>oD>8~ZIEi~WgGc@R3CY}2@P+US?uz~c- zA+F#x>Y_KC#t$6BFVw|9{rC?Ti5-S)V}Sa=2(|yppA&iH(jYO5)k@D0^#`J6rw}a+ x-cP_5}4{lC=&qB!O-tY46C8_vbKYZxR&nl%hZKX!g$8kKuG@f7vFL4e- zT*pt`z{HYL9%j+(AEG&@j7hx4F}%ZLe8LhgI!di#-BEe9%i@b*2s3W)AO};_duRq6 zAeTDlwt^9w7yZU5{J~Ki=3z59ji&Z+0kgP``)K-VIEf99&#SX|Cz!_Ea?cAif8aj) z=+Dj1+)5}NiFHw8OB$9u%8Rrml2Dg}9eXRK3lbBy@s+S@Nhd1UgNXskSXYCJyOyl6 h*_Ng*NlTypr*Cd|;)bT8v?R3TnITQO&w?xO_YdUvY1jY& diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.po b/evibes/locale/ru_RU/LC_MESSAGES/django.po index 27509191..75d99626 100644 --- a/evibes/locale/ru_RU/LC_MESSAGES/django.po +++ b/evibes/locale/ru_RU/LC_MESSAGES/django.po @@ -235,7 +235,7 @@ msgstr "Меню" #: evibes/settings/unfold.py:67 msgid "Dashboard" -msgstr "Приборная панель" +msgstr "Панель" #: evibes/settings/unfold.py:72 msgid "Health" @@ -255,7 +255,7 @@ msgstr "Группы" #: evibes/settings/unfold.py:92 msgid "Products" -msgstr "Продукция" +msgstr "Товары" #: evibes/settings/unfold.py:97 msgid "Categories" @@ -267,15 +267,15 @@ msgstr "Бренды" #: evibes/settings/unfold.py:107 msgid "Blogposts" -msgstr "Записи в блогах" +msgstr "Посты" #: evibes/settings/unfold.py:112 msgid "Periodic Tasks" -msgstr "Периодические задания" +msgstr "Периодические задачи" #: evibes/settings/unfold.py:137 msgid "Taskboard" -msgstr "Доска задач" +msgstr "Канбан" #: evibes/settings/unfold.py:142 msgid "Support" diff --git a/evibes/middleware.py b/evibes/middleware.py index ea82a981..59b40f57 100644 --- a/evibes/middleware.py +++ b/evibes/middleware.py @@ -31,10 +31,10 @@ class CustomLocaleMiddleware(LocaleMiddleware): parts = lang.replace("_", "-").split("-") if len(parts) == 2: lang_code = parts[0].lower() - region = parts[1].upper() + region = parts[1].lower() normalized = f"{lang_code}-{region}" else: - normalized = lang + normalized = lang.lower() translation.activate(normalized) request.LANGUAGE_CODE = normalized diff --git a/evibes/settings/base.py b/evibes/settings/base.py index fbe8be79..ac687ea4 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -211,6 +211,14 @@ TEMPLATES: list[dict[str, str | list[str | Path] | dict[str, str | list[str]] | USE_I18N: bool = True +LOCALE_PATHS: tuple[Path, ...] = ( + (BASE_DIR / "evibes/locale"), + (BASE_DIR / "engine/blog/locale"), + (BASE_DIR / "engine/core/locale"), + (BASE_DIR / "engine/payments/locale"), + (BASE_DIR / "engine/vibes_auth/locale"), +) + LANGUAGES: tuple[tuple[str, str], ...] = ( ("ar-ar", "العربية"), ("cs-cz", "Česky"), @@ -301,6 +309,8 @@ CURRENCIES_WITH_SYMBOLS: tuple[tuple[str, str], ...] = ( ("VND", "₫"), ) +LANGUAGE_URL_OVERRIDES: dict[str, str] = {code.split("-")[0]: code for code, _ in LANGUAGES if "-" in code} + CURRENCY_CODE: str = dict(CURRENCIES_BY_LANGUAGES).get(LANGUAGE_CODE) # type: ignore[assignment] MODELTRANSLATION_FALLBACK_LANGUAGES: tuple[str, ...] = (LANGUAGE_CODE, "en-us", "de-de") From 555666d6fe5d747e824740ea6b171c267969524c Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 01:23:09 +0300 Subject: [PATCH 10/18] Features: 1) Add language switching functionality with URL-based language detection and session/cookie persistence; Fixes: 1) Ensure safe next URL handling with host validation; Extra: 1) Introduce new i18n module with language normalization and translation support; 2) Add route for language setting endpoint. --- evibes/i18n.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ evibes/urls.py | 6 ++++ 2 files changed, 81 insertions(+) create mode 100644 evibes/i18n.py diff --git a/evibes/i18n.py b/evibes/i18n.py new file mode 100644 index 00000000..ee803531 --- /dev/null +++ b/evibes/i18n.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +from contextlib import suppress +from urllib.parse import urlparse + +from django.conf import settings +from django.http import HttpRequest, HttpResponseRedirect +from django.urls import translate_url +from django.utils.http import url_has_allowed_host_and_scheme +from django.utils.translation import activate +from django.views.decorators.csrf import csrf_exempt + + +def _normalize_language_code(lang: str | None) -> str: + if not lang: + return settings.LANGUAGE_CODE + + lang = lang.replace("_", "-").lower() + + overrides = getattr(settings, "LANGUAGE_URL_OVERRIDES", {}) or {} + if lang in overrides: + lang = overrides[lang].lower() + + supported = {code.lower() for code, _ in getattr(settings, "LANGUAGES", [])} + if lang not in supported: + primary = lang.split("-")[0] + if primary in overrides and overrides[primary].lower() in supported: + return overrides[primary].lower() + return settings.LANGUAGE_CODE + + return lang + + +def _safe_next_url(request: HttpRequest) -> str: + next_url = request.POST.get("next") or request.GET.get("next") or request.META.get("HTTP_REFERER") or "/" + if not url_has_allowed_host_and_scheme( + url=next_url, + allowed_hosts={request.get_host()}, + require_https=request.is_secure(), + ): + return "/" + return next_url + + +LANGUAGE_SESSION_KEY = "_language" + + +@csrf_exempt +def set_language(request: HttpRequest): + language = request.POST.get("language") or request.GET.get("language") + normalized = _normalize_language_code(language) + + response = HttpResponseRedirect("/") + if hasattr(request, "session"): + request.session[LANGUAGE_SESSION_KEY] = normalized + response.set_cookie(settings.LANGUAGE_COOKIE_NAME, normalized) + + activate(normalized) + + next_url = _safe_next_url(request) + + if translate_url is not None: + with suppress(Exception): + next_url = translate_url(next_url, normalized) + else: + parsed = urlparse(next_url) + parts = [p for p in parsed.path.split("/") if p] + supported = {code.lower() for code, _ in getattr(settings, "LANGUAGES", [])} + if parts and parts[0].lower() in supported: + parts[0] = normalized + path = "/" + "/".join(parts) + "/" if parsed.path.endswith("/") else "/" + "/".join(parts) + next_url = parsed._replace(path=path).geturl() + + response["Location"] = next_url + return response diff --git a/evibes/urls.py b/evibes/urls.py index 233877d4..4edd993a 100644 --- a/evibes/urls.py +++ b/evibes/urls.py @@ -12,6 +12,7 @@ from engine.core.views import ( favicon_view, index, ) +from evibes.i18n import set_language urlpatterns = [ ### COMMON URLS ### @@ -35,6 +36,11 @@ urlpatterns = [ "summernote/", include("django_summernote.urls"), ), + path( + r"i18n/setlang/", + set_language, + name="set_language", + ), path( r"i18n/", include("django.conf.urls.i18n"), From 56826300b66274479c8e96ab27d7fcb959258d1b Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 16 Nov 2025 14:50:17 +0300 Subject: [PATCH 11/18] Features: 1) Added dashboard callback view to expose revenue, returns, and order metrics; 2) Added new admin dashboard template with visual metrics and charts; 3) Integrated language flags into UNFOLD configuration using centralized LANGUAGES_FLAGS. Fixes: 1) None. Extra: 1) Refactored language flag definitions into a centralized dictionary in base settings; 2) Added commerce utility functions for revenue, returns, and order processing; 3) Improved code structure and documentation in views and utils. --- engine/core/templates/admin/index.html | 89 ++++++++++++++++++++++++++ engine/core/utils/commerce.py | 52 +++++++++++++++ engine/core/views.py | 25 ++++++++ evibes/settings/base.py | 31 +++++++++ evibes/settings/unfold.py | 53 +++++++-------- 5 files changed, 219 insertions(+), 31 deletions(-) create mode 100644 engine/core/templates/admin/index.html create mode 100644 engine/core/utils/commerce.py diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html new file mode 100644 index 00000000..71416016 --- /dev/null +++ b/engine/core/templates/admin/index.html @@ -0,0 +1,89 @@ +{% extends 'admin/base.html' %} + +{% load i18n %} + +{% block title %} + {% if subtitle %} + {{ subtitle }} | + {% endif %} + + {{ title }} | {{ site_title|default:_('Django site admin') }} +{% endblock %} + +{% block branding %} + {% include "unfold/helpers/site_branding.html" %} +{% endblock %} + +{% block content %} +